最新的syslog消息被延迟了。

4

我的程序使用以下命令将信息输出到日志文件中:

#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个回答

1

syslog设施的目的是接收消息,可能会快速生成,并最终保存在文件中。这样的一个设施可以追溯到20世纪50年代的操作系统(也许更早)。

日志文件通常不具有最后几条消息。这些消息保存在内核缓冲区中。 dmesg 命令可访问内存缓冲区。也许您可以使用它来查看日志的最新部分?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接