Systemd
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?
問題是呼叫了預設配置文件
50-defaults.conf
,所以首先處理它……這意味著日誌是
/var/log/syslog
按照預設配置發送到的,然後它會通過我的配置文件,它會停止,但這沒關係,因為它之後什麼都沒有。重命名它以
10-myapp.conf
解決問題。