我在 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 文件。
我在这里做错了什么?
我不知道
console.error()
会做什么,但是 systemd 将使所有写入 stdout 或 stderr 的消息生成一个默认级别为info
(SyslogLevel=info
) 的 syslog 条目。要获得不同的级别,打印的行必须以字符串开头,例如
<3>
which is levelerror
。默认情况下,Systemd 会删除此类前缀并将 syslog 条目严重性转换为它。参见man systemd.exec
选项SyslogLevelPrefix
和man sd-daemon
。