Systemd

使用 rsyslog 將 systemd 服務 stderr 記錄到不同的文件

  • March 12, 2021

我在 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 level error。預設情況下,Systemd 會刪除此類前綴並將 syslog 條目嚴重性轉換為它。參見man systemd.exec選項SyslogLevelPrefixman sd-daemon

引用自:https://serverfault.com/questions/1056848