常见打印log代码
void d_logs(int level, const char *fmt, ...)
{
va_list va;
char buff[LOG_LEN] = {0};
if (g_log_level < level) {
printf("error: log level error [%d:%d]\n ", g_log_level, level);
return;
}
snprintf(buff, LOG_LEN, "test: %s\n", fmt);
va_start(va, fmt);
if (syslog_mode == 1) {
vsyslog(level, buff, ap); -----》 使用系统log,
} else {
vfprintf(stderr, buff, ap); ----》输出到stderr
}
va_end(va);
return;
}
int main(void)
{
/*打开日志*/
openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);
d_log(LOG_INFO, "PID information, pid=%d", getpid());
d_log(LOG_DEBUG, "debug message ");
d_log(LOG_ERR, "err message ");
/*关闭日志*/
closelog();
}
大家经常打印系统log,常见的打印log有两种方式,一种是靠syslog输出,另一种输出到stderr。
syslog打印是有等级
LOG_EMERG = 0
LOG_ALERT = 1
LOG_CRIT = 2
LOG_ERR = 3
LOG_WARNING = 4
LOG_NOTICE = 5
LOG_INFO = 6
LOG_DEBUG = 7
LOG_EMERG | System ist unbrauchbar. |
LOG_ALERT | Aktion ist sofort erforderlich. |
LOG_CRIT | Kritischer Zustand. |
LOG_ERR | Fehler aufgetreten. |
LOG_WARNING | Warnung aufgetreten. |
LOG_NOTICE | Normale, aber wichtige Meldung. |
LOG_INFO | Informative Meldung. |
LOG_DEBUG | Debug-Level-Meldung |
系统syslog 是受syslogd进程控制,通常打印在messages中。具体打印log的等级syslogd进程的配置文件设置。
另一种输出到stderr,这种输出直接由相应进程执行d_log函数,然后输出到标准的错误中。其实就是把程序直接在后台执行,然后log会打印在/dev/console里。
但是这种方式存在风险,因为stderr可能被重定向到其他地方。