Systemd

rsyslog:使用自定義模板將日誌發送到不同的文件

  • December 18, 2018

所以,我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解決問題。

引用自:https://unix.stackexchange.com/questions/489698