PHP没有setlogmask?

PHP没有setlogmask?,php,Php,我正在开发一个用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

我正在开发一个用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');
?>
请注意,调试行没有写入。如何设置日志掩码

我习惯于在C中使用syslog(),但不是PHP。我无论如何也无法设置日志掩码(就像C中的setlogmask()一样)

我更新了测试脚本以包含错误报告(E_ALL),但仍然没有日志调试:

#!/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');
?>

第一行(注释掉)是原文。第二行允许调试消息通过。

这是因为PHP根据预定义的错误级别记录错误,您可以使用
error\u reporting()
并将所有级别设置为可接受:

error_reporting(E_ALL); // before any log call
等价物

ini_set('error_reporting', E_ALL);
这将包括调试级别

您还可以在配置(php.ini)级别对此进行更改


系统记录器的配置可能也会影响日志记录。如果使用
LOG\u peror
标志,您将看到所有
syslog()
调用都记录到标准错误中


您必须检查系统记录器的配置,以查看是否存在定义所需最低日志级别的设置(这样日志文件不会一直被垃圾发送调试消息)。

谢谢,我更新了测试脚本和问题。E_ALL似乎不包括LOG_DEBUG。这很奇怪,因为PHP手册中包含了LOG_DEBUG。作为故障排除,如果您
syslog(LOG_DEBUG,'FINDTHISLINE'),是否
grep-r/var/LOG/*FINDTHISLINE
会找到任何东西?我用grep-r FINDTHISLINE/var/log/*试过了,没有找到任何东西。看起来你的日志消息被系统范围的配置过滤了,我同意Progman的说法。老实说,我不知道Centos配置在这些方面会是什么样子。这是我找到的最接近的参考文献之一,我同意我们有点偏离了正轨,但我认为你关于错误报告(E_ALL)的答案回答了最初的问题。谢谢如果在脚本末尾调用
closelog
,会怎么样?调用closelog()没有任何区别。是的。LOG_peror在C程序上工作,它显示了不在/var/LOG/messages中的调试语句。
#*.none;mail.none;authpriv.none;cron.none                /var/log/messages
*.debug;mail.none;authpriv.none;cron.none                /var/log/messages
error_reporting(E_ALL); // before any log call
ini_set('error_reporting', E_ALL);