我有一个 systemd 服务,它输出到日志文件
StandardOutput=file:/path/to/log/file
StandardError=file:/path/to/error/file
我怎样才能在这些输出和错误前面添加数据+时间,以便它读取
10-09-2019 12:43:23 The output here.
答案1
我没有找到使用 systemd 来完成此操作的方法,StandartOutput
但StandardError
为使用 systemd 运行的 python3 脚本找到了解决方法。由于journald默认情况下也会将其输出发送到syslog,因此您可以使用rsyslog(或系统上的任何syslog实用程序)来实现您想要的(尽管输出也会在journald中重复,就像发送到journald时相关的所有内容一样)系统日志已启用(大多数现代发行版上的默认配置))。
这是我的/etc/rsyslog.d/python3_custom.conf
配置文件:
template(name="python3_custom_file" type="string" string="/var/log/python3/%programname:16:$%/out.log")
template(name="python3_custom_output" type="list") {
property(name="timereported" dateFormat="rfc3339")
constant(value=" ")
property(name="syslogseverity-text" caseConversion="upper")
property(name="msg" spifno1stsp="on")
property(name="msg" droplastlf="on")
constant(value="\n")
}
if($programname startswith 'python3_custom_') then {
action(type="omfile" dynaFile="python3_custom_file" template="python3_custom_output")
stop
}
然后你systemctl restart rsyslog
。最后,您需要告诉您的 systemd 服务要使用哪个 syslog ,您可以通过将该指令添加到您的文件中programname
来做到这一点。这样您就可以拥有多个服务,只需在该指令的末尾进行更改即可将其输出到(您可以轻松地根据自己的喜好进行更改)。SyslogIdentifier=python3_custom_programname
.service
programname
/var/log/python3/programname/out.log
答案2
试试这个(警告:未经测试)
Enable
和Start
一个“logging.service”systemctl
在
[Service]
定义中logging.service
使用以下内容:
[Unit]
Description=Start logging server # or whatever you choose to call it
[Service]
...
Type=forking
ExecStart=/bin/bash myLogger.sh start
...
- 编写
bash
脚本myLogger.sh
(或者无论你怎么称呼它)。在脚本中,使用以下命令开始日志中的每一行:
printf '%(%Y-%m-%d %H:%M:%S)T' -1
printf
不会引入换行符,因此您应该能够在此之后立即附加日志数据。