過濾掉 syslog-ng 中的設施
以下是我的一些
/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);};
我想請您注意包含“過濾器”的行。在那裡你可以看到我正在過濾掉來自
authpriv
的日誌cron
。據我所知authpriv
和cron
是 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); };