首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP没有setlogmask吗?

PHP没有setlogmask吗?
EN

Stack Overflow用户
提问于 2018-08-15 04:09:34
回答 1查看 80关注 0票数 3

我正在开发一个在PHP中运行的遗留应用程序。我正在移植到Centos7,PHP5.4.16。

我想将日志消息写入syslog,并编写一个测试脚本:

代码语言:javascript
复制
#!/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的内容如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/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。

下面是程序:

代码语言:javascript
复制
#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中的一个简单规则:

代码语言:javascript
复制
#*.none;mail.none;authpriv.none;cron.none                /var/log/messages
*.debug;mail.none;authpriv.none;cron.none                /var/log/messages

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-15 04:52:51

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

您必须检查系统日志程序的配置,以查看是否有定义最低所需日志级别的设置(这样日志文件就不会一直收到调试消息的垃圾邮件)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51849060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档