Libevent日志系统
Libevent在默认情况下,会将日志信息输出到终端上,可以编写日志回调函数,在回调函数中把信息输出到一个文件上。Libevent允许提供日志回调函数接口,只需设置日志回调函数。当有日志时,Libevent库就会调用这个日志回调函数,回调函数的格式如下所示。
typedef void (*event_log_cb)(int severity, const char *msg);
void event_set_log_callback(event_log_cb cb);
第一个参数severity是级别类型,有下面这些:
#define EVENT_LOG_DEBUG 0
#define EVENT_LOG_MSG 1
#define EVENT_LOG_WARN 2
#define EVENT_LOG_ERR 3
/* Obsolete names: these are deprecated, but older programs might use them.
* They violate the reserved-identifier namespace. */
#define _EVENT_LOG_DEBUG EVENT_LOG_DEBUG
#define _EVENT_LOG_MSG EVENT_LOG_MSG
#define _EVENT_LOG_WARN EVENT_LOG_WARN
#define _EVENT_LOG_ERR EVENT_LOG_ERR
Libevent是通过定义全局函数指针变量来指向用户定义的日志回调函数。
static event_log_cb log_fn = NULL;
void event_set_log_callback(event_log_cb cb)
{
log_fn = cb;
}
若用户不自己定义日志回调函数,libevent会调用默认的日志函数event_log函数,只是简单地根据参数判断日志记录的级别,然后把级别和内容输出。
static void event_log(int severity, const char *msg)
{
if (log_fn)
log_fn(severity, msg);//调用用户的日志回调函数
else {
const char *severity_str;
switch (severity) {
case _EVENT_LOG_DEBUG:
severity_str = "debug";
break;
case _EVENT_LOG_MSG:
severity_str = "msg";
break;
case _EVENT_LOG_WARN:
severity_str = "warn";
break;
case _EVENT_LOG_ERR:
severity_str = "err";
break;