Configuration
rsyslog 配置語法
我需要對一些日誌消息採取一些措施。例如,我想根據嚴重性將它們記錄到不同的文件中。
如果我使用這個,一切都很好:
if $programname == 'myprog' then -/var/log/myprog.log if $programname == 'myprog' and $syslogseverity-text >= 'warning' then -/var/log/myprog-alert.log if $programname == 'myprog' ~
這將“myprog”發出的每條消息記錄到 /var/log/myprog.log
這個日誌只記錄“myprog”發出的警告和錯誤消息到 -/var/log/myprog-alert.log
然後停止處理(謝謝到’〜’)
.
我喜歡更性感的東西:
if $programname == 'myprog' then { *.* -/var/log/myprog.log *.warning -/var/log/myprog-alert.log ~ }
但是這個後來的構造,雖然被 rsyslog 接受,但不過濾程序名。
例如,即使來自任何程序,每條消息都會寫入 /var/log/myprog.log。
.
任何人都可以解釋我的錯誤或誤解在哪裡?
.
最終方法,來自以下答案:
使用“現代” rsyslogd。版本 > 7.xy
使用以下語法:
if $programname == 'myprog' then { *.warning -/var/log/myprog-alert.log *.* -/var/log/myprog.log *.* stop }
或者這個:
if $programname == 'myprog' then { *.warning -/var/log/myprog-alert.log -/var/log/myprog.log stop }
您的行僅包含 ‘~’ 是錯誤的。它應該是“. ~”。
我知道你主要使用 Debian stable。您的 rsyslog 版本是 5.xy,不接受 RanierScript。
您可以更新到 backports 版本(目前為 7.6.3),然後您的第二個範例應該可以工作。
根據過濾器和RanierScript的 rsyslog 文件,不支持多行 { .. } 語法。Rsyslog 的解析器通常不會給出錯誤,寧願忽略問題或以您不希望的方式解釋它們。您的“性感”範例可能正在執行
{
與“myprog”匹配的事件的操作(我找不到這樣的操作,所以我懷疑這意味著“什麼都不做”)。第二行和第三行被視為傳統風格的 syslog 配置,第四行和第五行無效(同樣,可能“什麼都不做”)