在Ubuntu 12.04(Precise Pangolin)环境中设置 PHP CLI 日志记录时,这个问答线程对我非常有帮助,所以我想发布一个回答,以提炼我所学到的知识。除了 provided by David Chan 和 as George Cummins 的重要信息之外,我还创建了一个 logrotate.d 脚本以确保 PHP CLI 错误日志不会失控,并设置它以便多个用户能够将错误记录到常见的 PHP CLI 错误日志中。
首先,PHP CLI 的默认行为是将错误消息记录到标准输出;记录到文件不是默认行为。这通常意味着登录到运行 PHP CLI 命令的同一命令行终端会话。虽然 PHP ini 文件确实为指定的 error_log 提供了调整,但需要进行额外调整才能真正使其正常工作。
首先,我必须创建一个初始 php_errors.log 文件:
sudo touch /var/log/php_errors.log
由于有问题的服务器供从事各种项目的 Web 开发人员使用,因此我为他们建立了一个名为 www-users 的公共组。在这种情况下,我希望php_errors.log 可以被www-users 读写,我像这样更改文件的所有权:
sudo chown root:www-users /var/log/php_errors.log
然后把文件的权限改成这样:
sudo chmod 664 /var/log/php_errors.log
是的,从安全角度来看,www-users 中的任何人都可以读写日志文件并不是那么好。但这是一个受控的共享工作环境。所以我相信用户会尊重这样的事情。此外,当从 CLI 运行 PHP 时,任何可以执行此操作的用户都需要对日志进行写访问,甚至可以写入日志。
接下来,进入/etc/php5/cli/php.ini 调整默认的 Ubuntu 12.04 设置以匹配这个新的日志文件:
sudo nano /etc/php5/cli/php.ini
很高兴log_errors 在 Ubuntu 12.04 中默认启用:
log_errors = On
但要允许记录到文件,我们需要更改 error_log 以匹配新文件,如下所示:
error_log = /var/log/php_errors.log
设置logrotate.d 脚本。
现在应该是这样,但由于我不想让日志失去控制,我为php_errors.log 设置了logrotate.d。在/etc/logrotate.d/ 中创建一个名为php-cli 的文件,如下所示:
sudo nano /etc/logrotate.d/php-cli
并将此日志轮换守护程序脚本的内容放在那里:
/var/log/php_errors.log {
weekly
missingok
rotate 13
compress
delaycompress
copytruncate
notifempty
create 664 root www-users
sharedscripts
}
测试设置。
完成后,让我们使用David Chan’s tip 测试设置:
php -r "error_log('This is an error test that we hope works.');"
如果运行正确,您应该会被退回到一个空的命令提示符,因为 PHP CLI 错误不再发送到标准输出。因此,请检查实际的 php_errors.log 是否有类似这样的测试错误消息:
tail -n 10 /var/log/php_errors.log
那里应该有一个带时间戳的错误行,看起来像这样:
[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.