所以,我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
解决问题。