當前位置:編程學習大全網 - 源碼下載 - 發送syslog時openlog函數可以不用嗎

發送syslog時openlog函數可以不用嗎

發送syslog時openlog函數可以不用.

Syslog是壹種工業標準的協議,可用來記錄設備的日誌。

Ubuntu下安裝syslog apt-get install inetutils-syslogd

這裏面的三個函數openlog, syslog, closelog是壹套系統日誌寫入接口。另外那個vsyslog和syslog功能壹樣,只是參數格式不同。

通常,syslog守護進程讀取三種格式的記錄消息。此守護進程在啟動時讀壹個配置文件。壹般來說,其文件名為/etc/syslog.conf,該文件決定了不同種類的消息應送向何處。例如,緊急消息可被送向系統管理員(若已登錄),並在控制臺上顯示,而警告消息則可記錄到壹個文件中。該機制提供了 syslog函數,其調用格式如下

#include <syslog.h>

void openlog (char*ident,int option ,int facility);

void syslog(int priority,char*format,……)

void closelog();

調用openlog是可選擇的。如果不調用openlog,則在第壹次調用syslog時,自動調用openlog。調用closelog也是可選擇的,它只是關閉被用於與syslog守護進程通信的描述符。調用openlog 使我們可以指定壹個ident,以後, 此ident 將被加至每則記錄消息中。ident 壹般是程序的名稱(例如 ,cron ,ine 等)

程序的用法示例代碼如下:

#include <syslog.h>

int main(int argc, char **argv)

{

openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);

syslog(LOG_DEBUG,

"This is a syslog test message generated by program '%s'\n",

argv[0]);

closelog();

return 0;

}

編譯生成可執行程序後,運行壹次程序將向/var/log /message文件添加壹行信息如下:

Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program './a.out'

syslog函數及參數

syslog函數用於把日誌消息發給系統程序syslogd去記錄,此函數原型是:

void syslog(int priority, const char *format, ...);

第壹個參數是消息的緊急級別,第二個參數是消息的格式,之後是格式對應的參數。就是printf函數壹樣使用。

如果我們的程序要使用系統日誌功能,只需要在程序啟動時使用openlog函數來連接 syslogd程序,後面隨時用syslog函數寫日誌就行了。

下面介紹在RedHat和ubuntu中如何配置它:

Ubuntu和紅帽常使用它,並且通過文件/etc/rsyslog.conf進行管理。文件中包含許多指定的特殊系統日誌:有的是控制臺方面的,有的是文件方面或其它主機的。

首先,我們需要載入合適的TCP和UDP插件以支持接收系統日誌。把下面的代碼添加到rsyslog.conf的頭部:

$modload imtcp

$modload imudp

$InputTCPServerRun 10514

$UDPServerRun 514

載入的這兩個模塊能支持監聽TCP和UDP的端口,並且指定哪個端口來接受事件,在這種情況下,使用TCP的10514端口和UDP的514端口。妳需要確認壹下本地防火墻(在妳的主機和中央系統日誌服務器之間的防火墻)

下面我們需要指定壹些規則來告訴rSyslog在哪放輸入事件。如果妳不添加任何規則,輸入事件將按照本地的規則進行處理,並且與本地主機的事件交織在壹起。我們需要在上面添加節之後和本地處理系統日誌之前來正確的指定這個規則,例如:

if $fromhost-ip isequal '192.168.0.2' then /var/log/192.168.0.2.log

& ~

這裏我們說的每壹個來自於192.168.0.2的系統日誌都應該保存在/var/log/192.168.0.2.log文件中。&~這個符號是非常重要的,因為它告訴rSyslog將停止處理消息。如果妳把它忘寫了,消息將越過下壹個規則,並且繼續處理。在這壹規則中還有其他的變量。例如:

if $fromhost-ip startswith '192.168.' then /var/log/192.168.log

& ~

這裏我們用192.168.*替代了以這個為開始的所有IP地址,寫入到/var/log/192.168.log文件中。妳還可以看到壹些其它的過濾。

妳將需要重啟這個rsyslog服務來激活我們所做的新的配置:

$ sudo service rsyslog restart

現在,對於發送方的主機,我們還需要對文件rsyslog.conf進行壹些更改,在文件的頭部,添加下面這行:

*.* @@192.168.0.1:10514

這是發送的所有事件,來自於所有源代碼和所有重要級別(用*.*),通過TCP協議傳給IP地址為192.168.0.1的10514端口。妳可是用妳所在環境的地址來替換這個IP地址。要啟用此配置,妳將需要重啟主機上的rSyslog。

妳可以通過SSL/TLS更進壹步地發送妳的系統日誌。如果妳在互聯網上或其它網絡間傳輸系統日誌,這也沒什麽壞處,妳可能會發現這個的簡單說明。

現在,如果給妳的配置管理系統(如果不使用這個,妳可以試壹試Puppet或Cfengine工具)添加這個配置,然後,您可以用適當的系統日誌來有效地配置每臺主機,以確保妳的日誌將被發送到中央系統日誌服務器。

  • 上一篇:庫存周轉率是庫存管理的核心指標
  • 下一篇:請問我的電腦性能怎麽
  • copyright 2024編程學習大全網