Linux

過濾掉 syslog-ng 中的設施

  • April 20, 2011

以下是我的一些/etc/syslog-ng/syslog-ng.conf與登錄文件相關的內容debug.log

source s_sys { file ("/proc/kmsg" log_prefix(“kernel:”)); unix-stream ("/dev/log"); 內部的(); #udp(ip(0.0.0.0) 埠(514)); };

目的地 d_mesg { 文件(“/tmp/log/debug.log”);};

過濾 f_filter2 { level(info..emerg) 而不是設施(mail,authpriv,cron); };

日誌{源(s_sys);過濾器(f_filter2);目的地(d_mesg);};

我想請您注意包含“過濾器”的行。在那裡你可以看到我正在過濾掉來自mailauthpriv的日誌cron。據我所知mailauthprivcron是 syslog 的預定義工具。

我的查詢是:

我編寫了一個名為“pm”的守護程序,它也使用 syslog API 進行日誌記錄。現在無論我的守護程序記錄什麼,都會進入文件/tmp/log/debug.log,如上所示。我想過濾掉“pm”的日誌進入/tmp/log/debug.log. 為了更清楚,我希望過濾器像

過濾 f_filter2 { level(info..emerg) 而不是設施(mail,authpriv,cron,pm); };

請注意:f_filter2 與上面的區別。

是否有可能做到這一點 ?如何防止pm日誌進入/tmp/log/debug.log

我得到了答案。

我們可以使用 filter 關鍵字創建過濾器:

filter <filtername> { expression; };

其中表達式是一個簡單的布爾表達式。您可以使用“and”、“or”和“not”來連接內置函式。函式可以是以下之一:

  • 設施(以逗號分隔的設施名稱列表)
  • 級別(逗號分隔的優先級名稱列表或由“..”分隔的範圍)
  • program(regexp to match program name)
  • 主機(匹配程序名稱的正則表達式)
  • 匹配(正則表達式匹配程序名稱)

因此,如果我們想將我們自己的程序(例如“pm”)添加到過濾器中,請像這樣使用它:

過濾 f_filter2 { level(info..emerg) 而不是設施(mail,authpriv,cron) 和程序(pm); };

如果我們想過濾掉“pm”的日誌資訊,使用這樣的過濾器:

過濾 f_filter2 { level(info..emerg) 而不是設施(mail,authpriv,cron) 而不是程序(pm); };

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