使用 rsyslog 将 systemd 服务 stderr 记录到不同的文件

使用 rsyslog 将 systemd 服务 stderr 记录到不同的文件

我在 systemd 服务中有以下配置:

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=udocit

这个 rsyslog conf 文件:

if $programname == 'udocit' and $syslogseverity > 5 then {
  action(
    type="omfile"
    FileCreateMode="0640"
    File="/var/log/udocit.log"
  )
& stop
}

if $programname == 'udocit' and $syslogseverity <= 5 then {
  action(
    type="omfile"
    FileCreateMode="0640"
    File="/var/log/udocit.err"
  )
& stop
}

该服务启动一个 nodejs 应用程序。

我希望来自函数console.error()并输出到 stderr 的消息能够通过此配置发送到 udocit.err 文件,但所有消息都会写入 udocit.log 文件。

我在这里做错了什么?

答案1

我不知道console.error()会发生什么,但 systemd 会让所有写入 stdout 或 stderr 的消息生成一个默认级别为info( SyslogLevel=info) 的系统日志条目。

要获取不同的级别,打印的行必须以字符串开头,例如<3>which is level error。默认情况下,Systemd 会删除此类前缀,并将 syslog 条目严重性转换为该前缀。请参阅man systemd.exec选项SyslogLevelPrefixman sd-daemon

相关内容