我认为有一种更优雅的方法可以解决这个问题:使用标识符将stdout/stderr发送到syslog,并指示syslog管理器按程序名拆分其输出.
在systemd服务单元文件中使用以下属性:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
然后,假设您的发行版使用rsyslog管理系统日志(log),在/etc/rsyslog.d/<new_file>.conf
中创建一个包含以下内容的文件:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
现在,让日志(log)文件可由syslog写入:
# ls -alth /var/log/syslog
-rw-r----- 1 syslog adm 439K Mar 5 19:35 /var/log/syslog
# chown syslog:adm /path/to/log/file.log
重新启动rsyslog(sudo systemctl restart rsyslog
)并尽情享受吧!您的程序stdout/stderr仍将通过journalctl(sudo journalctl -u <your program identifier>
)提供,但它们也将在您 Select 的文件中提供.
Source via archive.org