Linux
如何設置系統日誌以記錄到文件和緩衝區
我正在使用使用 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 輸出到緩衝區嗎?
在busybox 版本中查看syslogd.c的一些來源,看起來這是不可能的。適當的程式碼似乎是:
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;
聲明。