我的日志记录有问题。根据下面的配置,如果我想将应用程序日志文件保存在 /var/log 中,则必须执行 rsyslog restart。另外,我必须重新启动 rsyslog 以防止日志轮换。 rsyslog 和 systemd 服务的正确配置是什么以避免 rsyslog 重新启动?
我的配置:/etc/rsyslog.d/myapp.conf
if $programname == 'myapp' then {
/var/log/myapp/myapp.log
stop
}
/etc/systemd/system/myapp.service
[Unit]
Description=myapp
[Service]
User=myapp
ExecStart=/usr/bin/myapp
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
/etc/logrotate.d/myapp.conf
/var/log/myapp/myapp.log {
rotate 7
daily
size 100MB
compress
missingok
notifempty
postrotate
sudo systemctl restart rsyslog.service
endscript
}
答案1
您应该能够告诉 rsyslogd 重新打开日志文件,如下所示:
/usr/bin/systemctl kill -s HUP rsyslog.service
我还没有找到如何让它重新加载配置,大多数点击都说你需要重新启动它才能应用新配置。
我发现这个服务器故障问题链接了它的信息不可能:
https://serverfault.com/q/1053728/343786
这些帖子讲述了一些关于为什么这不可能:
https://rainer.gerhards.net/2008/10/new-rsyslog-hup-processing.html
https://github.com/rsyslog/rsyslog/issues/3759
后者参考 RELP,可用于避免重启期间丢失日志消息,请参阅:
https://en.wikipedia.org/wiki/Reliable_Event_Logging_Protocol