Configuration

rsyslog 配置語法

  • October 9, 2014

我需要對一些日誌消息採取一些措施。例如,我想根據嚴重性將它們記錄到不同的文件中。

如果我使用這個,一切都很好:

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 配置,第四行和第五行無效(同樣,可能“什麼都不做”)

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