最近在搞dhcpv6,在调试代码的过程中发现log_debug函数里面的debug syslog没有打印出来,查看了代码,log_debug定义如下:
-
#define CVT_BUF_MAX 1023
-
static char mbuf [CVT_BUF_MAX + 1];
-
static char fbuf [CVT_BUF_MAX + 1];
-
int log_debug(const char*fmt, ...)
-
{
-
var_list list;
-
-
do_percentm(fbuf, fmt);
-
-
va_start(list, fmt)
-
vsnprintf(mbuf,sizeof(mbuf),fbuf,fmt);
-
va_end(list);
-
-
#ifndef DEBUG
-
syslog(log_priority | LOG_DEBUG, "%s", mbuf);
-
#endif
-
-
if (log_perror) {
-
IGNORE_RET (write (STDERR_FILENO, mbuf, strlen (mbuf)));
-
IGNORE_RET (write (STDERR_FILENO, "\n", 1));
-
}
-
-
return 0;
-
}
log_debug函数实质上就是调用了syslog函数,那为啥没有日志输出呢?刚开始怀疑在syslog.conf中是不是没有将debug log放入对应的文件,查看/etc/syslog.conf如下:
-
AH-5f8ec0:/tmp/root# more /etc/syslog.conf
-
facility local6
-
bufferedsize 256
-
debugsize 128
-
errorsize 64
-
*.debug /var/log/messages------------------说明debug及其以上级别的log都放入/var/log/messages中。
-
*.error /f/etc/err_messages
-
#*.=debug /var/log/debug_messages
-
#* /dev/ttyS0
-
logging trap level info
-
logging trap path 2
-
logging-trap-flag false
-
debug timestamp true
-
*.alert root,admin
-
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之下,所以没有打印出。
阅读(5459) | 评论(0) | 转发(0) |