次のrsyslog構成ファイルを使用して、プログラムログを特定のファイルにリダイレクトします。
# Name of the program
set $.program_name = "myapp";
# Path to the log file
set $.logfile_path = "/var/log/myapp.log";
# Templates
$template log_file, "%$.logfile_path%"
$template datetime_message, "[%timestamp:::date-year%-%timestamp:::date-month%-%timestamp:::date-day%_%timestamp:::date-hour%_%timestamp:::date-minute%_%timestamp:::date-second%.%timestamp:0:3:date-subseconds%]%msg%\n"
# Program log redirection
if( ($programname == $.program_name)) then
{
?log_file;datetime_message
}
利用可能な記憶領域が多くなく、プログラムでログが多く生成されるため、logrotateを使用して定期的にファイルを回転させて圧縮した後、記憶容量が大きいサーバーに転送するため、マウントされたパーティションは決して飽和しません/var
。
/var/log/messages
ログがファイルにリダイレクトされても、ログが送信されていることに/var/log/syslog
気づくまではうまくいきました/var/log/user.log
。
その結果、ログは4つの異なるファイルにコピーされ、そのうち3つは定期的に循環されず、パーティションは非常に迅速に飽和しました。
ログの送信方法を検索しましたが、/var/log/myapp.log
何も見つかりませんでした。また、変更を避けている特定/etc/rsyslog.conf
のrsyslog設定ファイルのみを修正したいと思います/etc/rsyslog.d/99-myapp.conf
。
myapp
すべてのログが他のファイルにのみ送信され、他のファイル/var/log/myapp.log
には送信されないことをsyslogにどのように通知できますか?
答え1
メッセージを選択してそれに対処したら、stop
次のタスクを追加してメッセージの追加処理を停止できます。
if( ($programname == $.program_name)) then
{
?log_file;datetime_message
stop
}
デフォルトの構成ファイルに含まれている場合は、
$IncludeConfig /etc/rsyslog.d/*.conf
ファイルでこれを行うことができます(例:今後通常の状況でのその他の作業。 「廃棄」という言葉を探す文書。