最新的系统日志消息被延迟

时间:2015-04-17 05:55:39

标签: c linux syslog rsyslog

我的程序使用这种命令将信息输出到日志文件:

#include <syslog.h>

int main(void)
{
    openlog(NULL, LOG_PID | LOG_PERROR, LOG_USER);
    /* ... */
    syslog(LOG_INFO, "My message\n");
}

我还在10-myconfig.conf中创建了以下文件/etc/rsyslog.d

# Create template for exec-name specific output files
$Template DynaFile,"/var/log/%PROGRAMNAME%.log"

# Printout format for user log
$Template UserLogFormat,"%pri-text%: %timegenerated% %syslogtag%%msg:::drop-last-lf%\n"

# Set user log
user.* ?DynaFile;UserLogFormat

正如预期的那样,消息同时传递到/var/log/syslog/var/log/my_program.log

但是,最后一行不会立即显示在/var/log/my_program.log中。最后几行似乎缺失,但在更多行到达后,会出现缺失的行。

看起来有某种缓冲区,直到完全才会刷新到文件中。我希望至少在每一个新行都会发生这样的刷新,就像printf那样,但它看起来不像那样。

如何确保将日志消息立即刷新到日志文件?

1 个答案:

答案 0 :(得分:1)

syslog工具的目的是接受可能快速生成的消息,并最终将它们保存在文件中。这样的设施可以追溯到20世纪50年代(可能在之前)的操作系统。

日志文件没有最后几条消息是正常的。消息保存在内核缓冲区中。 dmesg命令访问内存缓冲区。也许你可以用它来查看日志的最新部分?