LAMP是很常用的软件栈,有时开发一些小型的PHP站点程序,在发生语法错误等阻断程序执行的问题时,类似Whoops这样的调试辅助组件也不能起作用,只能看日志然后检查代码;不过ssh到服务器(或vagrant的开发环境)看日志文件总是有些不太方便。前文曾介绍一种便捷的在web页查看错误日志的方法,即用一个PHP文件读取日志文件、做一些简单的格式化后直接呈现在页面上,原理很简单,权限设定是成功的关键。本文介绍一个专门查看错误日志的精致的web程序,LogHappens。
Fork后功能更新
因为此程序被设计用来从事本地开发,没有访问限制,并且使用了几个国外CDN上的静态文件,国内/本地访问可能不方便,所以fork后进行了改造。以下是增加的可在config.php
配置的项目,后文的下载链接也更改为fork后的地址。
// interval between ajax requests, in milliseconds, use a big number if you want to refresh to see updates
$interval = 30 * 1000;
// access the site with this parameter for security and privacy, if this set, access your site with ?token=mytoken parameter
$token = 'mytoken';
// ip scope which are allowed to access this site
$ipwhitelists = ['127.0.0.1', '192.168.99.1', '123.56.24.0/22'];
// load the static files(js/css/fonts) from local, not cdn; 0 or 1, default 1
$local_static = 1;
- 添加了token,如果设置此项,以后访问要在地址后加
?token=mytoken
参数 - 支持IP白名单,可在
$ipwhitelist
数组中设置IP地址或IP范围 - 支持从本地载入全部所需的静态文件,只需将
$local_static
设为1 - 支持设定ajax请求的间隔,原来是5秒,现在默认30秒,如果想手动刷新查看日志更新,可以将
$interval
设为一个很大的值
前两项可以让你比较放心地在公网IP上开放站点访问,第三项可以提升本地环境使用的体验,第四项是满足一些人(比如本人)的使用习惯。
介绍
LogHappens长这样:
特征:
- 轻量、开源、免费
- 单页面查看、管理多个日志文件,卡片视图,点击切换日志,设定显示条目数等
- Ajax获取日志更新(无需刷新页面查看新错误信息)
- 一个配置文件就是一个日志文件解析器对,默认提供
CakePHP 3.x
和Apache 2.4
的日志文件解析器 - 安装配置简单,要添加站点日志,只需复制一份模板,更改title和path即可
安装
下载:
# 下载
cd /var/www/html/
wget https://github.com/qijianjun/logHappens/archive/master.zip
# 解压、命名、进入目录
unzip master.zip
mv logHappens-master/ logHappens
cd logHappens/
# 复制一份适用于apach2.4的解析器
cp logics_templates/apache24.php logics/vps123.php
# 编辑解析器
vim logics/vps123.php
# 在文件中指定title和file路径
$menu = [
'icon' => 'logos:apache',
'color' => 'red',
'title' => 'TopVPS',
'file' => '/var/log/apache2/vps123_error.log'
];
增加一个虚拟主机:例如为log.conf
ServerName log.test
ServerAdmin webmaster@localhost
DocumentRoot /vagrant/webapp/logHappens
Protocols h2 h2c http/1.1
Options -Indexes +FollowSymlinks
AllowOverride All
Require all granted
ErrorLog $APACHE_LOG_DIR/log_error.log
CustomLog $APACHE_LOG_DIR/log_access.log combined
然后启用站点:
a2ensite log
service apache2 reload
然后访问加了token的地址,检查是否可顺利运行,正常的话应如下:
很可能,你会遭遇下图所示的权限错误:
修订权限问题的原则是让运行Web服务器的用户(例如Apache进程的所有者)拥有对日志目录/文件的读权限。比如若用Apache,就需要让www-data
对/var/log/apache2
目录可读。以下演示修订错误的全过程:
# 用namei命令确认要读取的文件沿途路径上的权限,需要保证目标文件可读,且作为other或者group对沿途路径有r+x的权限
qiushan@topvps:~$ sudo namei -l /var/log/apache2/error.log
f: /var/log/apache2/error.log
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxrwxr-x root syslog log
drwxr-x--- root adm apache2
-rw-r----- root adm error.log
# 用usermod指令,将www-data加入adm组
qiushan@topvps:~$ sudo usermod -a -G adm www-data
# 确认www-data在adm组
qiushan@topvps:~$ sudo id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),0(root),4(adm)
# 注销后重新登陆,然后用[新权限生效后的www-data用户]重启Web服务器即可
qiushan@topvps:~$ sudo service apache2 restart
# 如果使用php-fpm,也需要重启php-fpm
qiushan@topvps:~$ sudo cat /etc/php/7.0/fpm/php-fpm.conf | grep pid
pid = /run/php/php7.0-fpm.pid
qiushan@topvps:~$ sudo cat /run/php/php7.0-fpm.pid
1822
qiushan@topvps:~$ sudo kill -USR2 `cat /run/php/php7.0-fpm.pid`
关于权限设定,请看前文如何以恰当的权限运行Syncthing 了解详情。如果还不能解决,可以参考:readable by apache.
官方文档翻译
LogHappens!发生了错误。每个开发人员都熟悉这个。令人讨厌的是,如果你想看看发生了什么,你必须在数百行的日志文件之间艰难寻索,日志文件通常以txt格式编写,没有什么选项可以更简单的格式查看它们,比如按时间分组。
这就是LogHappens存在的原因!
LogHappens旨在解决这个问题。它是一个简单的工具,它不会阻止您编写错误,但它会在记录某些内容时立即通知您。
它是否处理不同的日志格式?
当然可以。虽然每个软件都有自己的错误,但每个软件都有自己的记录方式。这就是为什么我试图让它尽可能简单地创建自己的例程来读取日志文件。没有花哨的正则表达式字符串:如果你只是想读取文件,你可以按日期/时间编写一个小的php例程和组日志条目,只打印文件的其余部分。如果你喜欢冒险,你可以做任何你想做的事:突出显示单词,创建标签,分裂错误。…..唯一的限制是你的创意和想象力!
如何添加要跟踪的日志文件?
您可以使用在logic_templates
文件夹中看到的其中一个文件。根据您的需要进行编辑(例如日志路径)。将其移至logic
文件夹并刷新页面。瞧。使用尽可能多的逻辑来跟踪更多日志文件,并根据需要编辑它们对日志进行分组的方式。它应该很简单,不是吗?
我可以共享新的模板文件吗?
当然!如您所见,我已将apache24
和CakePHP 3.x
日志文件放在logic_templates
文件夹中。如果您已创建自己的例程,请将其发送给我,我很乐意将其添加到其他模板中!
未来计划?
虽然目前不支持,但我计划也添加对远程日志的支持。也许通过SFTP,我还不知道。…..欢迎提建议,我是开放的!
疑难解答
默认情况下,apache本身无法读取apache日志文件。这是一件好事,至少在生产服务器上是这样。如果您在开发计算机上,但是如果要使用LogHappens,则应该为这些文件提供正确的权限。方法如下:
- 编辑
/etc/logrotate.d/apache2
,找到create 640 root adm
的行,并替换为create 777 root adm
。 - 向apache日志目录添加777权限:
sudo chmod -R 777 /var/log/apache2/
参考资料
本文修订记录
2019-05-20 ,+,增加关于安全隐私的说明,更改下载地址为Fork后更新的github地址
-- EOF --
本文最后修改于5年前 (2019-05-21)