我正在开发一个在PHP中运行的遗留应用程序。我正在移植到Centos7,PHP5.4.16。
我想将日志消息写入syslog,并编写一个测试脚本:
#!/usr/bin/php
<?php
$log_options = LOG_NDELAY | LOG_PID;
$log_priorities = LOG_ERR | LOG_WARNING | LOG_INFO | LOG_DEBUG;
$log_facility = LOG_LOCAL2;
openlog('test.php', $log_options, $log_facility);
syslog(LOG_ERR, 'LOG_ERR -- this is an error');
syslog(LOG_WARNING, 'LOG_WARNING -- this is a warning');
syslog(LOG_INFO, 'LOG_INFO -- this is info');
syslog(LOG_DEBUG, 'LOG_DEBUG -- this is debug info');
?>
写入syslog的内容如下:
Aug 14 14:03:28 localhost test.php[32774]: LOG_ERR -- this is an error
Aug 14 14:03:28 localhost test.php[32774]: LOG_WARNING -- this is a warning
Aug 14 14:03:28 localhost test.php[32774]: LOG_INFO -- this is info
请注意,调试行并未编写。如何设置日志掩码?
我习惯于在C中使用syslog(),而不是PHP。我不知道如何设置日志掩码(就像C中的setlogmask()一样)。
我更新了我的测试脚本以包含error_reporting(E_ALL),但仍然没有LOG_DEBUG:
#!/usr/bin/php
<?php
error_reporting(E_ALL);
$log_options = LOG_NDELAY | LOG_PID;
$log_priorities = LOG_ERR | LOG_WARNING | LOG_INFO | LOG_DEBUG;
$log_facility = LOG_LOCAL2;
openlog('test.php', $log_options, $log_facility);
syslog(LOG_ERR, 'LOG_ERR -- this is an error');
syslog(LOG_WARNING, 'LOG_WARNING -- this is a warning');
syslog(LOG_INFO, 'LOG_INFO -- this is info');
syslog(LOG_DEBUG, 'LOG_DEBUG -- this is debug info');
?>
同样的事情也会写入syslog。
第三次编辑:
我写了一个小的C程序,它也不会记录调试消息。不知道为什么。我有三个系统,其中一个可以记录调试,两个不可以,这三个系统都是CentOS7。
下面是程序:
#include <syslog.h>
int main(int argc, char* argv[])
{
setlogmask(LOG_UPTO(LOG_DEBUG));
openlog("test", LOG_NDELAY | LOG_PID, LOG_LOCAL2);
syslog(LOG_ERR, "LOG_ERR -- this is an error");
syslog(LOG_WARNING, "LOG_WARNING -- this is a warning");
syslog(LOG_INFO, "LOG_INFO -- this is info");
syslog(LOG_DEBUG, "LOG_DEBUG -- this is debug info");
closelog();
}
所以看起来这是两件事情的结合。阿拉莉娃和普罗格曼说的话。我选择alariva所说的,因为它最接近原始的PHP问题。
第四次编辑:
缺少LOG_DEBUG消息是/etc/rsyslog.conf中的一个简单规则:
#*.none;mail.none;authpriv.none;cron.none /var/log/messages
*.debug;mail.none;authpriv.none;cron.none /var/log/messages
第一行(被注释掉)是原始的。第二行允许调试消息通过。
发布于 2018-08-15 04:52:51
日志记录也可能受到系统记录器配置的影响。如果使用LOG_PERROR
标志,您将看到所有syslog()
调用都记录到标准错误中。
您必须检查系统日志程序的配置,以查看是否有定义最低所需日志级别的设置(这样日志文件就不会一直收到调试消息的垃圾邮件)。
https://stackoverflow.com/questions/51849060
复制相似问题