我希望能够将 error_log 显示为网页,以便同事(无需 root 权限)可以查看该网页,以解决其 PHP 开发问题。
在我的 CentOS 5.x 机器上,错误日志位于:/var/log/httpd/error_log,并且该目录只有 root 权限才能访问。
我本来想编写一个 CGI 脚本来显示日志,但由于该脚本在 apache 进程中运行,因此它不是 root,因此无法访问日志文件。(试过了)。令我困惑的是,即使包含目录是 root 访问权限,apache 也能以某种方式写入它来记录错误。
我该如何实现我的目标?或者你能建议一个替代方案吗?
答案1
实际上,在某些情况下我可能不会使用我的其他答案,但我会将其保留在那里以供参考。
如果您的同事拥有自己的 VirtualHost,我会将该虚拟主机设置为将其日志输出到不同的目录,这样他们只会看到其系统的错误:
<VirtualHost *:80>
ServerName colleagues.vhost.com
DocumentRoot ...
...
ErrorLog /home/user/errorlog-colleagues.vhost.com
</VirtualHost>
或者,如果启用了 .htaccess 文件,让它们简单地将 php 错误日志输出到它们想要的位置,例如:
/路径/到/webroot/.htaccess:
php_value error_log /home/user/phperrorlog-colleagues.vhost.com
答案2
您可以更改文件的权限...如果不行,您可以有一个每分钟运行一次的 cron 作业,从 apache 日志文件执行 rsync 到另一个文件(您可以在其中设置读取权限),然后将其显示在网页上。
您还可以通过其他方式来更改 apache 的日志记录机制,这取决于您更改配置的能力。
答案3
我将更改 /var/log/httpd 目录的权限以解决从控制台访问文件的问题。
添加新组并将用户添加到其中:
groupadd apache-logs
usermod -a -G apache-logs user
chgrp apache-logs /var/log/httpd
chmod g+rx /var/log/httpd
或者如果您愿意让系统上的任何用户查看日志,只需:
chmod go+rx /var/log/httpd
不管你怎么做,如果你升级 httpd,它都会重置为原始权限。否则它不应该改变。
此外,apache 能够以默认权限写入日志的原因是日志文件由 apache 在以 root 身份运行时打开。一旦 apache 完全加载,它将更改其用户为 apache,但将继续打开日志文件。