Systemd
使用 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 文件。我在這裡做錯了什麼?
我不知道
console.error()
會做什麼,但是 systemd 將使所有寫入 stdout 或 stderr 的消息生成一個預設級別為info
(SyslogLevel=info
) 的 syslog 條目。要獲得不同的級別,列印的行必須以字元串開頭,例如
<3>
which is levelerror
。預設情況下,Systemd 會刪除此類前綴並將 syslog 條目嚴重性轉換為它。參見man systemd.exec
選項SyslogLevelPrefix
和man sd-daemon
。