红联Linux门户
Linux帮助

Linux和Windows下使用Syslog库

发布时间:2014-08-07 09:49:19来源:linux网站作者:fan_hai_ping

本文档描述如何在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。