Chinaunix首页 | 论坛 | 博客
  • 博客访问: 557381
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-08-20 17:08:47

最近在搞dhcpv6,在调试代码的过程中发现log_debug函数里面的debug syslog没有打印出来,查看了代码,log_debug定义如下:

点击(此处)折叠或打开

  1. #define CVT_BUF_MAX 1023
  2. static char mbuf [CVT_BUF_MAX + 1];
  3. static char fbuf [CVT_BUF_MAX + 1];
  4. int log_debug(const char*fmt, ...)
  5. {
  6.      var_list list;
  7.      
  8.      do_percentm(fbuf, fmt);
  9.      
  10.      va_start(list, fmt)
  11.      vsnprintf(mbuf,sizeof(mbuf),fbuf,fmt);
  12.      va_end(list);

  13. #ifndef DEBUG
  14.      syslog(log_priority | LOG_DEBUG, "%s", mbuf);
  15. #endif
  16.      
  17.      if (log_perror) {
  18.          IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
  19.          IGNORE_RET (write (STDERR_FILENO, "\n", 1));
  20.      }

  21.      return 0;
  22. }
log_debug函数实质上就是调用了syslog函数,那为啥没有日志输出呢?刚开始怀疑在syslog.conf中是不是没有将debug log放入对应的文件,查看
/etc/syslog.conf如下:

点击(此处)折叠或打开

  1. AH-5f8ec0:/tmp/root# more /etc/syslog.conf
  2. facility local6
  3. bufferedsize 256
  4. debugsize 128
  5. errorsize 64
  6. *.debug /var/log/messages------------------说明debug及其以上级别的log都放入/var/log/messages中。
  7. *.error /f/etc/err_messages
  8. #*.=debug /var/log/debug_messages
  9. #* /dev/ttyS0
  10. logging trap level info
  11. logging trap path 2
  12. logging-trap-flag false
  13. debug timestamp true
  14. *.alert root,admin
  15. AH-5f8ec0:/tmp/root#
很明显配置文件中已经将debug及其以上级别的log都放入/var/log/messages文件中了,但是为啥还是没有输出呢?
查阅了相关资料,发现代码中有一个控制日志输出级别的API---setlogmask(LOG_UPTO(LOG_INFO));

setlogmask: 用来设置记录日志的优先级,即只记录指定优先级的日志消息。

setlogmask(LOG_ERR) ----- 仅仅记录ERR级别的日志消息

setlogmask(LOG_UPTO(LOG_ERR))----- 记录ERR以及之前的所有日志消息  

在笔者的代码中,使用setlogmask(LOG_UPTO(LOG_INFO))控制了只记录INFO以及info级别以上的日志信息,显然debug级别的日志在INFO之下,所以没有打印出。



阅读(5424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~