即时地在WEB页面查看apache的错误日志

     0评论

文章目录[隐藏]

LAMP是很常用的软件栈,有时开发一些小型的PHP站点程序,在发生语法错误等阻断程序执行的问题时,类似Whoops这样的调试辅助组件也不能起作用,只能看日志然后检查代码;不过ssh到服务器(或vagrant的开发环境)看日志文件总是有些不太方便,所以本文提供一种便捷的在web页查看错误日志的方法。

2019-05-18 更新:推荐LogHappens替换本文的简陋方案,这是一款与本文所述工作原理相同,但做的比较精致的错误日志查看程序,且支持更多Web服务器。

原理和要点

原理很简单,就是提供一个无需路由的固定路径的php文件,由它读取最新的日志,然后直接打印输出。要点有这么几个:

  1. 保证www-data对要读取的日志文件及其路径有读权限;
  2. 区分开发环境和生产环境,有时这两个环境的错误文件路径也不一致;
  3. 日志文件通常是由logrotate程序滚动更新的,不过即使最新的日志文件也不应输出全部内容,通常tail打印最新的10行就够了;
  4. 长时间不用了,要将此文件删除或者命名为随机字符串,不要因为这个通道泄露关键信息;

代码

下面的html换行符+html换行符请自行替换,部分注释代码是为了解释清楚以及备忘,实际使用时可以删除。

if (!preg_match('#production.com#', $_SERVER['HTTP_HOST'])) { $logpath = '/var/log/apache2/production_error.log'; } else { $logpath = '/var/log/apache2/dev_error.log'; } // 根目录 // $logpath = '/errora.log'; // 与此文件同目录 // $logpath = 'error.log'; // 通常打印最近的10行即可 exec('tail ' . $logpath . ' -n 10', $error_logs); foreach($error_logs as $error_log) { echo "html换行符+html换行符".$error_log; } // 必要时也可以获取文件的全部内容 // echo file_get_contents($logpath);

在web页显示Apache错误日志

权限

apache的站点错误日志默认在/var/log/apache2目录下,从属于root:adm,www-data是没有读取权限的。文末第二个参考链接中给出了三个让www-data可以读取error日志的方法:

  1. 转移错误日志文件到www-data有读权限的路径;
  2. 创建软连接;
  3. 将www-data加入root组;

作者推荐第一个方法,因为安全原因不建议使用第三个,而第二个可能不起作用。因为第一个方法太麻烦,且无法保证读到最新的日志文件,所以对我们的最初目的来说没有意义;我实际使用的是第三个方法,安全固然不安全,不过那开发环境下就图个省事嘛,也不失为一个不错的方法。关于添加www-data到新组后,如何使新的权限设定生效,请参看前文如何以恰当的权限运行Syncthing

参考资料

-- EOF --

本文最后修改于6年前 (2019-05-18)

差评不太行一般挺好非常不错 (2 votes, average: 1.00 out of 5)
读取中...
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址