1、syslog简介 syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。
2、syslog配置文件 syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。现在,我们先看看syslog.conf文件的配置行格式(这个文件里的每一个配置行都是同样的格式)。 syslog配置行的格式如下所示: 消息类型.优先级 动作域 mail.*/var/log/mail, 这一行由两个部分组成。第一个部分是一个或多个“选择条件”;上例中的选择条件是“mail”。选择条件后面跟一些空格字符,然后是一个“操作动作”;上例中的操作动作是:/var/log/mail 1、选择条件 选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件其实是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)把它们分隔开。上面给出的例子里只有一个选择条件“mail”。大家可以在我们后面给出的那个完整的syslog配置文件示例里看到同时有多个选择条件的配置行。 表1 syslog消息类型
消息类型 | 消息来源 |
kern | 内核 |
User | 用户程序 |
Damon | 系统守护进程 |
Mail | 电子邮件系统 |
Auth | 与安全权限相关的命令 |
Lpr | 打印机 |
News | 新闻组信息 |
Uucp | Uucp程序 |
Cron | 记录当前登录的每个用户信息 |
wtmp | 一个用户每次登录进入和退出时间的永久记录 |
Authpriv | 授权信息 |
2、优先级
优先级是选择条件的第二个字段,它代表消息的紧急程度。对一个应用程序来说,它发出的哪些消息属于哪一种优先级是由当初编写它的程序员决定的,应用程序的使用者只能接受这样的安排——除非打算重新编译系统应用程序。表2按严重程度由低到高的顺序列出了所有可能的优先级。
表2 syslog常用优先级
优先级 | 描述 |
emerg | 最高的紧急程度状态 |
alert | 紧急状态 |
Cirt | 重要信息 |
warning | 警告 |
err | 临界状态 |
notice | 出现不寻常的事情 |
info | 一般性消息 |
Debug | 调试级信息 |
None | 不记录任何日志信息 |
3、优先级限定符
syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!)。熟悉规则表达式的读者应该对这三种限定符不会感到陌生。星号(*)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点”。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”
将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。
等号(=)的含义是“只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点”。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。就像它在编程时的用法一样,等号意味着等于且仅等于。叹号(!)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内”。
3、syslog进程 如果需要重新启动syslog守护进程(/etc/syslog.conf的修改只有在syslog守护进程重新启动后才会生效),并且只想重新启动syslog守护进程而不是整个系统,在Red HatLinux机器上,执行以下两条命令之一即可: /etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart /etc/rc.d/init.d/syslogrestart
4、灵活运用syslog调用接口 在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。因此,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。 1.主要的函数 在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用: openlog:打开日志设备,以供读取和写入,与文件系统调用的open类似; syslog:写入日志,与文件系统调用的write类似; closelog:关闭日志设备,与文件系统调用的close类似; vsyslog:它和syslog功能一样,负责写入日志,只是参数格式不同。
一个实际的程序调用例子 下面给出一个使用上述几个函数写日志的例子,以供大家参考: #include<syslog.h> int main(void) { int log_test; /*打开日志*/ openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER); /*写日志*/ syslog(LOG_INFO, "PID information, pid=%d", getpid()); syslog(LOG_DEBUG,"debug message "); /*关闭日志*/ closelog(); } http://www.e800.com.cn/articles/2011/0722/491641_2.shtml