Syslogd编程

 
Syslogd编程

Syslogd守护进程,可以将接收消息并把消息分发到相应的地方。通过syslogd提供的编程接口和相应的配置,程序中完全可以直接利用syslogd进行用户程序日志的登记,简单方便,不要再考虑到多进程并行环境下文件的加锁问题。

一、 基本概念
每一个子系统发出日志消息的时候都会给消息指定一个类型。一个消息分成两个部分:“设备(facility)”和“级别(level)”。“设 备”标识发出消息的子系统,可以把同一类型的消息组合在一起,“级别”表示消息的重要性,其范围从debug(最不重要)到emerg(最重要), facility和level组合起来称为priority。/usr/include/sys/syslog.h中对此有相关的定义。

设备(facility)
编程接口中的定义 配置或logger命令时的使用 含义
LOG_KERN Kern 内核产生的消息
LOG_USER User 用户进程产生的消息(DEFAULT)
LOG_MAIL Mail mail子系统产生的消息
LOG_DAEMON Daemon 守护进程产生的消息
LOG_AUTH auth,security 认证系统,如login、su等产生的消息
LOG_SYSLOG Syslog Syslogd内部产生的消息
LOG_LPR Lpr Line printer子系统产生的消息
LOG_NEWS News Usenet新闻子系统产生的消息
LOG_UUCP Uucp UUCP子系统产生的消息
LOG_CRON Cron Cron和at产生的消息
LOG_LOCAL0
-
LOG_LOCAL7 Local0-local7 保留,可以随意分配这些值

级别(level)
编程接口中的定义 配置或logger命令时的使用 含义
LOG_EMERG emerg 应急情况,这种消息会被广播到所有登录用户
LOG_ALERT alert 应当立即采取措施的情况
LOG_CRIT crit 严重情况
LOG_ERR err 一般错误
LOG_WARNING warning 警告消息
LOG_NOTICE notice 非错误情况,需要引起注意
LOG_INFO info 提示性消息
LOG_DEBUG debug DEBUG情况

二、 配置说明
Syslogd的配置文件为/etc/syslog.conf,其中每个配置都由两个域组成,分别是“选择器”(selector)和“动作” (action)。“选择器”用由“设备(facility)”和“级别(level)”组合表示(可以用“*”通配符表示“任何一个”),它们之间用点 分隔。“动作”表示一有一个新的消息和“选择器”相匹配的时候要采取什么行动,如果“动作”只是一个文件名,那么消息就会被添加到这个文件中,“动作”和 “选择器”之间用TAB键分隔,注意不能是空格。
用命令“logger –p <facility.level> <message>”可以进行syslogd的测试。

三、 日志说明
日志文件中每一行表示一个消息,而且都由四个域的固定格式组成:
1. 时间标签(timestamp):表示消息发出的日期和时间
2. 主机名(hostname):表示生成消息的计算机的名字
3. 生成消息的系统:如:kernel表示消息来自内核;进程的名字,表示发出消息的程序的名字,方括号里的是进程的PID
4. 消息(message):消息的内容

四、 函数接口
#include <syslog.h>
void openlog( char * <程序的名字>, int <选项>, int <facility>)
<选项>可以是以下值的OR组合:
LOG_CONS : 如果消息无法送到syslogd,直接输出到系统console。
LOG_NDELAY : 立即打开到syslogd的连接,默认连接是在第一次写入讯息时才打开的。
LOG_PERROR : 将消息也同时送到stderr 上
LOG_PID : 将PID记录到每个消息中

void syslog( int <priority>, char * <mesg>)
<priority>是facility和level的OR组合

void closelog( void )

一般只需要用syslog()函数,其他函数可以不用。

你可能感兴趣的:(Syslogd编程)