lxy777 发表于 2015-11-19 15:37:28

keepalived源码浅析——日志

  源码:
  #include <syslog.h>
#include <stdio.h>
#include <stdarg.h>
/* Boolean flag - send messages to console as well as syslog */
static int log_console = 0;//是否发送信息到控制台
void
enable_console_log(void) {
log_console = 1;
}
void
log_message(const int facility, const char *format, ...) //可变参数
{
va_list args;
char buf;
va_start(args, format);
vsnprintf(buf, sizeof(buf), format, args);
va_end(args);
if (log_console) {
fprintf(stderr, &quot;%s\n&quot;, buf);
}
syslog(facility, &quot;%s&quot;, buf);// syslog日志
}


  
  
  


  调用方式:
  log_message(LOG_INFO, &quot; SNMP Trap enabled&quot;);

  
  


  
  在主函数main.c中:
  


  

if (debug & 1)
enable_console_log();


关于syslog相关代码:  
  
  打开
  

openlog(PROG, LOG_PID | ((debug & 1) ? LOG_CONS : 0), log_facility);


其中:  
  

#define PROG    &quot;genhash&quot;
int log_facility = LOG_DAEMON;

  


  
  void openlog(const char *ident, int option, int facility);

此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。




  openlog的第一个参数ident将是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。也就是区分日志的一个标记字符,可以由我们自己来设定。
  第二个参数option应该是日志消息格式内容的配置选项。是下列值取与运算的结果:LOG_CONS, LOG_NDELAY, LOG_NOWAIT, LOG_ODELAY, LOG_PERROR, LOG_PID,各值意义请参考man openlog手册



第三个参数指明记录日志的程序的类型,我们都只用LOG_LOCAL0 到 LOG_LOCAL7中的任意一个。可选的程序有很多

关闭
  closelog();


  
  


  

版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: keepalived源码浅析——日志