基於配置文件的解決方案可用。我認爲CentOS默認附帶rsyslog,即使沒有,你也可以隨yum一起安裝rsyslog。這個解決方案只適用於rsyslog,沒有別的。
雖然這是一個趕上。你不能在具有相同名稱的進程之間使用rsyslog(或幾乎所有的syslog守護進程實現)分離日誌消息。相同的可執行路徑。但是,rsyslog允許您根據程序名稱篩選消息。這裏有一個可能的解決方案:大多數程序使用argv [0]調用openlog(3),即。作爲第一個參數的可執行名稱。現在既然你沒有透露你正在運行的實際程序,我沒有辦法爲你確定,但我總是可以閱讀你自己程序的源代碼。
在大多數情況下,可執行路徑是程序名稱,雖然一些守護進程不會弄亂argv [0](着名的例子是postfix和sendmail)。另一方面,Rsyslog提供了一種過濾機制,允許用戶根據發送程序的名稱來過濾消息(現在您可能會看到如何全部連接到openlog(3)的調用方式)。因此,我們可以對程序名稱進行過濾,而不是直接過濾進程。我們可以通過創建符號鏈接來影響。
所以,這個解決方案只適用於下列條件:a)你運行的進程在開始執行之後並沒有擺弄argv [0]; b)可以爲二進制文件創建符號鏈接,從而爲同一個程序創建兩個不同的名稱; c)你的程序使用argv [0]作爲調用的第一個參數調用openlog(3)。
鑑於這些兩個條件,則可以簡單地在/etc/rsyslog.conf
這樣的(直接從rsyslog documentation例如)過濾消息:
if $programname == 'prog1' then {
action(type="omfile" file="/var/log/prog1.log")
}
if $programname == 'prog2' then {
action(type="omfile" file="/var/log/prog2.log")
}
例如如果您的程序被調用/usr/bin/foobar
,並且您創建了指向/usr/bin/foobar
的符號鏈接/usr/bin/prog1
和/usr/bin/prog2
,則上述配置文件示例將分別將來自作爲「prog1」和「prog2」啓動的進程的消息分別指向不同的日誌文件。這個例子不會擺弄其他任何東西,因此所有這些消息仍然會轉到常規日誌文件,除非您明確地將其過濾掉。
提及您正在使用的syslog的哪些實現。答案在某種程度上取決於實現特定的配置文件語法 –
@Sami:我正在使用Linux CentOS。你在找什麼信息?我可以運行一些命令或查找某個文件來找出它? – Arun