歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux和Windows下使用Syslog庫

Linux和Windows下使用Syslog庫

日期:2017/2/28 15:29:19   编辑:Linux教程

本文檔描述如何在Windows和Linux下使用Syslog庫,在Linux下GNU庫中已經自帶有syslog庫,但是在Windows下的標准庫中沒有syslog庫,從網上可以找到syslog的開源代碼實現,接口函數基本上與Linux一致,並且提供一個擴展函數來設置讀取syslog服務器的IP地址和端口。下面將詳細說明如何使用Syslog庫。

Linux下使用

Syslog庫有一組系統日志寫入接口,分別為openlog/syslog/closelog/vsyslog,其中vsyslog和syslog功能是一樣的,只是參數不同而已。

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

#include <syslog.h>

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 <syslog.h>

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消息。

Windows下使用

介紹

Syslog-win32開源庫時一個在Windows下使用的syslog實現,它包括服務器和客戶端程序,特征如下:

1) 兼容RFC-3164 syslog協議;

2) 高性能;

3) 消息傳遞;

4) 日志循環;

5) 完全開源。

下載網址:http://syslog-win32.sourceforge.net,版本1.0。

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

1) 移植已有的UNIX軟件到原生的Windows平台;

2) 編寫可移植軟件;

3) 編寫純Windows軟件,但是知道EventLog的問題而尋找替代品。

希望該庫能夠為你提供幫助。

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

Syslog-win32的源代碼沒有權限要求,可以任意的使用、修改和發行它。

Syslog客戶端

客戶端的配置文件是可選的,它的文件名稱為syslog.host,它應該包含主機名或者是IPV4的地址,後面可以選擇跟著“:”冒號和端口號。缺省的端口為514,如果在當前路徑下不存在這個文件,那麼會使用localhost和缺省端口。

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

Syslog服務器端

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

使用方法

從syslog-win32網站上下載源代碼壓縮包(syslog-win32-0.3.tar.bz2)。解壓縮後,把客戶端所使用的兩個文件添加到使用syslog的項目中,如下:

1) 在include目錄下的syslog.h頭文件;

2) 在client目錄下的syslog-client.c實現文件;

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

Syslog庫的使用接口和方法與Linux一樣,唯一的區別是有一個Windows下專用的函數:

extern const char* set_syslog_conf_dir( constchar* dir );

它可以設置syslog.host讀取時的目錄,syslog.host中只包含syslog服務器使用的主機名和端口,使用冒號分割,例如:192.168.8.11:514。syslog的缺省端口為514。

Copyright © Linux教程網 All Rights Reserved