Linux

如何設置系統日誌以記錄到文件和緩衝區

  • June 11, 2018

我正在使用使用 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;聲明。

引用自:https://unix.stackexchange.com/questions/449156