Linux

讓 Syslog 記錄到 syslog 和自定義日誌文件

  • August 12, 2021

在系統日誌(Raspbian rsyslog swVersion=“8.1901.0”)中,

我正在嘗試將包含特定字元串的系統消息匹配/過濾到/var/log/syslog(預設)和自定義單獨的日誌文件,即:/var/log/nut.log.

我已經能夠通過將以下過濾器行放入來實現/etc/rsyslog.conf

# NUT logging: Include USB msgs since montoring UPS via only USB
:msg,contains,"USB" /var/log/nut.log
& stop
:msg,contains,"nut-" /var/log/nut.log
& stop

& stop一旦進行匹配,就需要停止過濾器。我相信首選方法是將其放在專用文件中,即:/etc/rsyslog.d/0-nut.conf

但是,當我這樣做時,過濾器會停止記錄到/var/log/syslog,並專門記錄到/var/log/nut.log… ?

有不同的方法可以做到這一點嗎?

謝謝!

中的$IncludeConfigorinclude()指令rsyslog.conf出現在大多數標準規則之前,包括將消息寫入的規則/var/log/syslog。如果您在此文件中的其他規則之後添加您的規則,那麼 nut 消息將syslog在它也匹配並寫入之前已經被寫入nut.log

相反,如果您將規則放在單獨的文件中,則消息將被寫入nut.log,然後stop將跳過後面的規則。答案是不使用stop

如果問題是消息可能同時包含“USB”和“nut-”,因此被寫入兩次nut.log,那麼您需要使用更複雜的語法。

舊語法很久以前就被RainerScript取代了。這意味著您可以編寫如下過濾器:

if ($msg contains "USB" or $msg contains "nut-") then {
  action(type="omfile" file="/var/log/nut.log")
}

這不需要阻止對消息的進一步處理。

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