syslog函数处理-keepalived源码解析

来源:互联网 发布:精良分班软件 编辑:程序博客网 时间:2024/05/16 10:30

在keepalived日志处理中,使用syslog来进程日志的存储。在keepalived的处理中新规函数如下所示:

头文件:lib/logger.h

函数形式:void log_message(int priority, char* format, ...);

函数功能:进行系统log记录

log_message函数处理如下所示:

voidlog_message(const int facility, const char *format, ...){/* 声明一个va_list */va_list args;char buf[256];/* 使用va_start函数来获取参数列表中的参数 */<strong>va_start</strong>(args, format);/* 根据参数args和类型format,向buf中打印数据 */<strong>vsnprintf</strong>(buf, sizeof(buf), format, args);/* 使用完毕后调用va_end结束 */<strong>va_end</strong>(args);if (log_console) {fprintf(stderr, "%s\n", buf);}<strong>syslog</strong>(facility, "%s", buf);}

日志函数:

头文件:<syslog.h>

函数:打开系统记录

函数形式:void openlog(const char *ident, int option, int facility);

参数:

ident :该参数常用来表示信息的来源。ident指向的字符信息会被固定地添加在每行日志的前面,一般为程序名称 

option :openlog函数和接下来调用的syslog函数的控制标志, 可以单独取其中的某个值,也可以通过与运算来获得多种特性 

参 数 说 明
LOG_CONS 如果将信息发送给syslogd守护进程时发生错误,直接将相关信息输出到终端
LOG_NDELAY 立即打开与系统日志的连接(通常情况下,只有在产生第一条日志信息的情况下才会打开与日志系统的连接)
LOG_NOWAIT 在记录日志信息时,不等待可能的子进程的创建
LOG_ODELAY 类似于LOG_NDELAY参数,与系统日志的连接只有在syslog函数调用时才会创建
LOG_PERROR 在将信息写入日志的同时,将信息发送到标准错误输出(POSIX.1-2001不支持该参数)
LOG_PID 每条日志信息中都包括进程号
facility :这个要与syslogd守护进程的配置文件对应,日志信息会写入syslog.conf文件指定的位置

参数 syslog.conf中对应的facility取值
LOG_KERN kern
LOG_USER user
LOG_MAIL mail
LOG_DAEMON daemon
LOG_AUTH auth
LOG_SYSLOG syslog
LOG_LPR lpr
LOG_NEWS news
LOG_UUCP uucp
LOG_CRON cron
LOG_AUTHPRIV authpriv
LOG_FTP ftp
LOG_LOCAL0~LOG_LOCAL7local0~local7

函数:进行系统记录

函数形式:void syslog(int priority, const char *format, ...);

参数说明:

priority:priority表示消息的级别。与openlog函数中的facility参数类似,priority参数与level也存在对应的关系

priority参数 syslog.conf中对应的level取值
LOG_EMERG emerg
LOG_ALERT alert
LOG_CRIT crit
LOG_ERR err
LOG_WARNING warning
LOG_NOTICE notice
LOG_INFO info
LOG_DEBUG debug

syslog函数的第二个参数为消息的格式,之后是格式对应的参数。函数的使用类似于printf函数。


函数:关闭系统记录

函数形式:void closelog(void);




0 0