そのため、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に保存しないようにするにはどうすればよいですか?
問題は、デフォルトの設定ファイルが50-defaults.conf
と呼ばれていたため、最初に処理されたということでした...
つまり、ログはデフォルトの設定に従って/var/log/syslog
に送信され、その後、設定ファイルを通過して停止しますが、その後に何もなかったため、問題ではありませんでした。
名前を10-myapp.conf
に変更すると、問題が修正されます。