考虑以下计划:
#include <syslog.h>
int main()
{
openlog("test-app", LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER);
setlogmask(LOG_UPTO(LOG_DEBUG));
syslog(LOG_DEBUG, "Testing!");
}
请注意使用LOG_PERROR
向 stderr 发送消息以及syslogd
配置为填充的文件(在我的情况下为/var/log/messages
)
test-app[28072]: Testing!
syslog文件包含:
Apr 17 13:20:14 cat test-app[28072]: Testing!
我可以配置syslog
以便控制台输出还包含时间戳吗?如果是这样,怎么样?
答案 0 :(得分:2)
使用syslog
电话时,这是不可行的。原因是您在日志文件中看到的时间戳是在将日志消息发送到守护程序之后。它是实际执行时间戳添加的syslog守护程序。日志记录守护程序是应用时间戳的东西。
当您使用LOG_CONS
和LOG_PERROR
选项时,消息将被发送到控制台或stderr,而不会有时间戳,因为在记录时不会发生时间戳。
基本上LOG_CONS
和LOG_PERROR
的使用完全绕过守护进程;您需要修改syslog调用本身的实现以添加自己的时间戳。值得庆幸的是,这很简单,因为syslog库调用的实现在glibc源代码中,the source isn't terribly complicated。