Linux和Windows下使用Syslog庫

2021-07-30 09:36:07 字數 2453 閱讀 1677

本文件描述如何在windows和

linux下使用syslog庫,在linux下gnu庫中已經自帶有syslog庫,但是在windows下的標準庫中沒有syslog庫,從網上可以找到syslog的開源**實現,介面函式基本上與linux一致,並且提供乙個擴充套件函式來設定讀取syslog伺服器的ip位址和埠。下面將詳細說明如何使用syslog庫。

syslog庫有一組系統日誌寫入介面,分別為openlog/syslog/closelog/vsyslog,其中vsyslog和syslog功能是一樣的,只是引數不同而已。

通常,syslog守護程序讀取三種格式的記錄訊息。此守護程序在啟動時讀取乙個配置檔案。一般來說,配置檔案的名稱為/etc/syslog.conf,這檔案決定不同型別的訊息由該送往何處。例如:緊急的訊息可以送給系統管理員,並且在控制台上顯示,而告警訊息則可以記錄到檔案中。該機制提供了syslog函式,其呼叫格式如下:

#include

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

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

void closelog();

呼叫openlog()是可選的,如果不呼叫openlog(),則在第一次呼叫syslog()時,自動會呼叫openlog()函式,呼叫closelog函式也是可選的,它只是關閉被用於與syslog守護程序通訊的描述符。呼叫openlog時可以指定乙個ident識別符號,這個indet將會新增到每個訊息中,它一般為程式的名稱。

示例程式如下:

#include

int main(int argc, char**argv)

openlog(「indent」,log_cons | log_pid, 0);

syslog(log_debug,「this is a syslog message generated by program %s\n」, argv[0]);

closelog();

return0;

編譯和執行程式後,在/var/log/message檔案的最後一行可以看到新增的訊息如下:

feb 12 08:48:38 localhost indent[7085]:this is a syslog message generated by program ./a.out

上面三個函式的詳細引數說明可以使用man命令檢視。

如果程式需要使用系統日誌功能,只需要在程式啟動時使用openlog函式來連線syslogd程式,然後使用syslog函式給守護程序傳送syslog訊息。

syslog-win32開源庫時乙個在windows下使用的syslog實現,它包括伺服器和客戶端程式,特徵如下:

1) 相容rfc-3164 syslog協議;

2) 高效能;

3) 訊息傳遞;

4) 日誌迴圈;

5) 完全開源。

syslog-win32可以幫助開發人員編寫可移植的軟體。下面一些情況可以使用:

1) 移植已有的unix軟體到原生的windows平台;

2) 編寫可移植軟體;

3) 編寫純windows軟體,但是知道eventlog的問題而尋找替代品。

當然,你也可以使用監控程式作為網路訊息收集器。但是我認為unix是乙個更好的選擇。不是因為這個庫不夠好(希望是這樣的),而是因為unix上具有更好的依賴性。

syslog-win32的源**沒有許可權要求,可以任意的使用、修改和發行它。

客戶端的配置檔案是可選的,它的檔名稱為syslog.host,它應該包含主機名或者是ipv4的位址,後面可以選擇跟著「:」冒號和埠號。預設的埠為514,如果在當前路徑下不存在這個檔案,那麼會使用localhost和預設埠。

這可能看上去有點奇怪(醜陋),除非你有更好的注意。值得注意的是:與daemon程式不同的是客戶端應該沒有任何依賴性。

概念相當的簡單:這裡有一些訊息源、訊息過濾器和目標伺服器。每一項都是唯一的名字,logpath與源、過濾器和目標伺服器聯絡在一起。         每一項都會在logpath中指定,但是logpath可以引用相同的源、過濾器和目標伺服器。伺服器端的配置檔案使用xml格式,它不是與unix syslog的配置檔案不一致。

1)  在include目錄下的syslog.h標頭檔案;

2)  在client目錄下的syslog-client.c實現檔案;

在vs 2008中會報錯:snprintf沒有定義,使用_snprintf替代即可。

syslog庫的使用介面和方法與linux一樣,唯一的區別是有乙個windows下專用的函式:

extern

const

char* set_syslog_conf_dir( const

char* dir );

它可以設定syslog.host讀取時的目錄,syslog.host中只包含syslog伺服器使用的主機名和埠,使用冒號分割,例如:192.168.8.11:514。syslog的預設埠為514。

Windows和Linux下socket的區別

1.標頭檔案 windows下winsock.h或winsock2.h linux下netinet in.h 大部分都在這兒 unistd.h close函式在這兒 sys socket.h 在in.h裡已經包含了,可以省了 2.初始化 windows下需要用wsastartup啟動ws2 32.l...

windows和linux下socket程式設計的不同

windows windows 標頭檔案的區別 include include windows 初始化的區別 windows 宣告socket socket型別 windows socket關閉 closesocket windows socket操作錯誤返回值 socket error windo...

Windows下安裝OpenSSL及其使用

1.perl 安裝後重啟系統。2latest openssl 並解壓到 c openssl 0.9.8k。參考openssl 目錄下的 install.win32 說明進行安裝 1 進入解壓目錄。cd c openssl 0.9.8k 2 執行configure。perl configure vc ...