我在 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
选项SyslogLevelPrefix
和man sd-daemon
。