2011-11-16 27 views
3

我在Perl消息記錄這樣的 -如何在syslog消息中欺騙主機名?

syslog ("LOG_INFO", "this is info"); 
syslog ("LOG_WARNING", "this is warning"); 

當我看到這些消息,我得到這個 -

Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is info 
Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is warning 

單詞「Ubuntu的」在系統日誌消息恰好是主機名本地主機。

有沒有辦法我可以在本地登錄,但指定一個主機名?

我的應用程序處理來自其他主機的數據並記錄有關它們的信息。如果我可以在記錄消息時指定主機名,這將非常棒,這樣我就可以輕鬆使用第三方工具,因爲它們可以根據主機名輕鬆過濾掉日誌。

順便說一句,如果我可以添加額外的question-爲什麼沒有顯示消息的級別日誌?我不應該期望在信息系統日誌消息中看到「信息」我正在登錄?

+1

你收到關於UDP 514,或'syslog'使用類似的標準'syslog'日誌上的TCP 514,或'rsyslog'的[RELP(http://www.librelp.com/)連接?或者,這一切都是在「事後」的日誌消息上完成的,在單臺機器上? – sarnold

+0

我正在使用'tail -f/var/log/syslog'命令閱讀我的日誌消息......這些消息正在本地寫入。如何確定這些是來自tcp/udp/relp? – user837208

+0

您的其他主機是否設置爲自動將消息轉發到本地計算機?在這種情況下,它通常是「正常工作」 - 至少在'rsyslog(8)'下。其他系統日誌守護進程可能不會發送所需的「主機」頭文件:http://www.rsyslog.com/article19/ – sarnold

回答

2

可能完成這一任務的最簡單的方法是設置syslog通過網絡來接收消息。對於rsyslog,這往往是在/etc/rsyslog.conf

# provides UDP syslog reception 
$ModLoad imudp 
$UDPServerRun 514 

我在這裏使用UDP,因爲它很容易在幾乎任何syslog守護程序做,證明它很容易:

$ echo "<0>Oct 11 22:14:15 mymachine testing" | nc -u localhost syslog 
^C 
$ tail -1 /var/log/syslog 
Oct 11 22:14:15 mymachine testing 

簡而言之: <nnn>代表設施和優先級,如section 4.1.1 of the RFC中所述。時間戳是在4.1.2高規格:總之,三個字母的英文縮寫月,沒有領導0 - 而不是一個前導空格:Aug__8而非Aug_8(下劃線使用,因爲在代碼塊空間崩潰)。主機名不能有任何域部分。 IP地址很好,包括IPv4和IPv6。

你也可以使用的Unix域套接字(unix(7))如/dev/log。這比UDP更可靠。

+0

謝謝!正是我在尋找 – user837208

+0

嘿,也感謝你 - 這是我第一次插入系統日誌線上協議,我不知道爲什麼我很驚訝它是如此人性化。我預計會有一堆可怕的ASN.1式結構。 – sarnold

0

不幸的是,如果您在本地進行日誌記錄,我不相信可以指定一個主機名。

而且,你不應該在你的日誌面前會看到「信息」。日誌級別影響消息的去向(可以在/etc/syslog.conf中對其進行定製)。默認情況下,LOG_INFO和LOG_WARNING轉到/var/log/messages.log,LOG_EMERG和LOG_ERR轉到/var/log/errors.log。該級別不會出現在輸出中。