将 systemd StandardOutput 定向到文件时如何包含日期+时间

将 systemd StandardOutput 定向到文件时如何包含日期+时间

我有一个 systemd 服务,它输出到日志文件

StandardOutput=file:/path/to/log/file
StandardError=file:/path/to/error/file

我怎样才能在这些输出和错误前面添加数据+时间,以便它读取

10-09-2019 12:43:23 The output here.

答案1

我没有找到使用 systemd 来完成此操作的方法,StandartOutputStandardError为使用 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.serviceprogramname/var/log/python3/programname/out.log

答案2

试试这个(警告:未经测试)

  1. EnableStart一个“logging.service”systemctl

  2. [Service]定义中logging.service使用以下内容:

[Unit]
Description=Start logging server   # or whatever you choose to call it

[Service]
...
Type=forking
ExecStart=/bin/bash myLogger.sh start
...

  1. 编写bash脚本myLogger.sh(或者无论你怎么称呼它)。在脚本中,使用以下命令开始日志中的每一行:
printf '%(%Y-%m-%d %H:%M:%S)T' -1

printf不会引入换行符,因此您应该能够在此之后立即附加日志数据。

相关内容