如何设置 syslog 以记录到文件和缓冲区

如何设置 syslog 以记录到文件和缓冲区

我使用的是使用 yocto 构建的嵌入式 Linux 操作系统。我正在尝试更改 busybox syslogd 以便将其输出到文件和缓冲区。这样我就可以使用logread -f并将输出保存到文件中以备将来需要查看它们时使用。现在我看到的问题是,将 syslogd-startup.conf 文件更改为以下内容后:

DESTINATION=" file buffer"       # log destinations (buffer file remote)
LOGFILE=/mnt/userrw/sd/logs   # where to log (file)
REMOTE=loghost:514      # where to log (syslog remote)
REDUCE=no           # reduce-size logging
DROPDUPLICATES=no       # whether to drop duplicate log entries
ROTATESIZE=2000           # rotate log if grown beyond X [kByte]
ROTATEGENS=2           # keep X generations of rotated logs
BUFFERSIZE=2000         # size of circular buffer [kByte]
FOREGROUND=no           # run in foreground (don't use!)
#LOGLEVEL=7         # local log level (between 1 and 8)

然后我运行重新启动命令/etc/init.d/syslog,然后运行以下命令:

ps aux | grep syslogd

我得到以下信息,确认 syslogd 的参数是正确的:

ps aux | grep syslogd
root      1648  0.3  1.7   4236  2588 ?        S    14:35   0:00 /sbin/syslogd -n -O /mnt/userrw/sd/logs -s 2000 -b 2 -C2000
root      1671  0.0  0.3   2240   496 pts/0    S+   14:35   0:00 grep syslogd

但问题是它永远不会打印到文件中。仅到缓冲区。如果我取出-C2000 arg(即仅具有DESTINATION=file),那么它会打印到文件。如何让它输出到文件和缓冲区?这不可行吗?我的 syslogd.conf 文件是空的。我应该使用它来输出到文件并使用 syslogd-startup.conf 来输出到缓冲区吗?

答案1

查看一些来源系统日志文件Abusybox的版本,看起来这是不可能的。适当的代码似乎是:

    if (LOG_PRI(pri) < G.logLevel) {
          if ((option_mask32 & OPT_circularlog) && G.shbuf) {
                log_to_shmem(G.printbuf);
                return;
          }
          log_locally(now, G.printbuf, &G.logFile);
    }

因此,如果您记录到缓冲区,它也会返回而不记录到文件。似乎有点目光短浅。也许你可以修补你的 yocto 以删除该return;语句。

相关内容