私は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 引数を取り出すと (つまり、DESTINATION=file のみ)、ファイルとして印刷されます。ファイルとバッファに出力するにはどうすればよいですか?これはできませんか?私のsyslogd.confファイルは空です。これをファイルに出力し、syslogd-startup.confを使用してバッファに出力する必要がありますか?
答え1
いくつかのソースをチェックしてください。システムログファイル存在するㅏbusyboxのバージョンではこれは不可能なようです。適切なコードは次のとおりです。
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;
文を削除できます。