我编写的 PHP 应用程序编写得很糟糕,在错误日志中生成了大量 E_NOTICE 和 E_WARNING 消息。我对此无能为力,但很难跟踪那些真正的错误,如 E_ERROR 和更糟糕的错误。
问题是:我可以为 Apache 中的单个虚拟主机创建具有不同 LogLevel 的多个错误日志文件吗?
例如,一个带有LogLevel通知,一个带有LogLevel错误。
答案1
我不知道是否有原生的方法可以做到这一点(但请参阅此回复的底部),但如果你使用的是 Linux,你可以在主日志上运行一些命令,如 tail -f /path/to/main/ | grep errorstring > error.log tail -f /path/to/main/ | grep warningstring > warning.log
-f 标志将继续监视新条目。将 errorstring 或 warningstring 替换为记录的所有错误类型或警告类型的条目的确切文本。
您可以在后台运行这些命令,这样当您的 shell 会话关闭时它们就不会终止,方法是将每个命令放入 bash 脚本中,然后使用以下语法运行它 nohup /path/to/script.sh >/dev/null 2>&1 &
如果只是临时使用,您可以在几个屏幕会话中手动启动它们。对于长期使用,请务必进行一些日志轮换,以免它们变得太大。
另一种更原生的方法是设置自定义 PHP 错误处理函数来执行日志记录。您可以使用 auto_prepend_file ini 指令将其应用于所有 PHP 代码,而无需修改应用程序。
答案2
另一种很酷的方法是配置 rsyslog 守护进程来创建这些文件。基本上,您可以设置一条规则,根据文本匹配输出到文件。打开 /etc/rsyslog.conf 并将其粘贴到其中
如果 $programname == 'my-name' 且 $msg 包含 'errorstring' 则 /var/log/my-error.log