web-dev-qa-db-ja.com

rsyslog:カスタムテンプレートを使用してログを別のファイルに送信します

そのため、systemdを使用してログをrsyslogに送信し、ログを/var/log/app.logに書き込みたいと思います。

これはJava独自のログ形式のアプリであるため、タイムスタンプやその他のものは必要ありません。メッセージ自体のみです。

私がこれまでに持っているのはこれです:

[Unit]
Description=My App
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
ExecStart=/usr/bin/Java -jar /opt/app.jar
Restart=on-failure

[Install]
WantedBy=multi-user.target

次に、/etc/rsyslog.d/myapp.confファイルがあります。

template(name="clean" type="string" string="%msg:2:$:drop-last-lf%\n")

if $programname == 'myapp' then action(type="omfile" file="/var/log/app.log" template="clean")
& stop

これを正しく理解していれば、プログラム名がmyappであれば、cleanテンプレートを使用し、ログを/var/log/app.logに保存してから停止する必要があります。

ログを/var/log/syslogにも送信することを除いて、これは機能します。

これらのログをsyslogに保存しないようにするにはどうすればよいですか?

2
caarlos0

問題は、デフォルトの設定ファイルが50-defaults.confと呼ばれていたため、最初に処理されたということでした...

つまり、ログはデフォルトの設定に従って/var/log/syslogに送信され、その後、設定ファイルを通過して停止しますが、その後に何もなかったため、問題ではありませんでした。

名前を10-myapp.confに変更すると、問題が修正されます。

5
caarlos0