有这些时候:我们一个小的项目或者是一个独立的由几个文件组成的可执行文件,希望有一些简单的输出,包括日志以及异常退出。但是我们又不希望因为这些需求安装一些类似于glog、log3cpp等日志开源的包,因为我们不需要一些类似于线程安全等之类的调用、就是希望简单一点,越简单越好。。。。
是的,就是这样。
头文件log.h 如下
#ifndef _LOG_H_ #define _LOG_H_ #ifdef __cplusplus extern "C" { #endif extern void set_syslog(int syslog); extern void abort(const char *msg, ...); extern void log(const char *msg, ...); extern void error(const char *msg, ...); extern void info(const char *msg, ...); #ifdef __cplusplus } #endif #endif
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #if HAVE_SYSLOG_H # include <syslog.h> #endif static int _syslog = 0; void set_syslog(int syslog) { _syslog = syslog; } void abort(const char *msg, ...) { va_list ap; va_start(ap, msg); #if HAVE_VSYSLOG if(_syslog) { vsyslog(LOG_ERR, msg, ap); } else #endif vprintf(msg, ap); va_end(ap); exit(1); } void log(const char *msg, ...) { va_list ap; if(_debug) { va_start(ap, msg); #if HAVE_VSYSLOG if(_syslog) { vsyslog(LOG_DEBUG, msg, ap); } else #endif vprintf(msg, ap); va_end(ap); } } void error(const char *msg, ...) { va_list ap; va_start(ap, msg); #if HAVE_VSYSLOG if(_syslog) { vsyslog(LOG_ERR, msg, ap); } else #endif vfprintf(stderr, msg, ap); va_end(ap); } void info(const char *msg, ...) { va_list ap; va_start(ap, msg); #if HAVE_VSYSLOG if(_syslog) { vsyslog(LOG_INFO, msg, ap); } else #endif vfprintf(stderr, msg, ap); va_end(ap); }