rsyslogのログフォーマットを調整する。
したいこと
ログ行頭をJun 1
のような%b %e
による表現から、13/04/2023
のようなDD/MM/YYYY
の表現に変更したい。デフォルトで西暦が表示されてないのは結構違和感がある。
テンプレートを使う
下のようなconfファイルでログフォーマットを調整というかカスタムすることができる:
# ログの格納パスの指定は適当
$template MyLogPathTemplate, "/var/log/example/%programname%.log"
# 今回のメイン。ログフォーマットをテンプレートにする。
$template MyMsgTemplate, "%$day%/%$month%/%$year% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n"
*.* -?MyLogPathTemplate;MyMsgTemplate
真ん中の行がログフォーマットをカスタムしているところ。ログ行頭の%b %e
つまり、Jun 1
のような表現から、目的のDD/MM/YYYY
に変更している。%b
や%e
については以下のman strftime
を参考になる:
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strftime.3.html
%timegenerated
の部分は、RFC3339
の形式の文字列12文字目から19文字目までを抜き出す構文を使っている。この辺りについてはドキュメントの以下の辺りに載っている:
RSyslog Documentation - rsyslog
-?
やテンプレートに関してはこちらに載っている:
RSyslog Documentation - rsyslog
モダンな形式
これから書くならモダンな書き方をした方がいいかもしれない。if文とも親和性が高い。下はその例:
$template MyLogPathTemplate, "/var/log/example/%programname%.log"
$template MyMsgTemplate, "%$day%/%$month%/%$year% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n"
# 何か条件付きでactionを実行する。
if (some_condition) then {
# ファイルへの書き込みアクション。omfileモジュールを利用
action(type="omfile" Template="MyMsgTemplate" dynaFile="MyLogPathTemplate")
# action後はこのメッセージは不要なので捨てる(ケースによる)
stop
}
アクションについてはこちらのドキュメントを参考にする:
RSyslog Documentation - rsyslog
template
の利用についてはomfile
モジュールのドキュメントも参考にする。大文字小文字は区別しなさそう:
RSyslog Documentation - rsyslog
stop
についてはこちらのドキュメントでページ内検索をかける:
RSyslog Documentation - rsyslog
おわり
若干rsyslogのドキュメントのなかは探しづらいなと思う。少し散らかった記述になってしまったが、書き残すことは大事なのでよし。
以上です。