我使用的是使用 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;
语句。