Libevent-日志处理
Posted randyniu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libevent-日志处理相关的知识,希望对你有一定的参考价值。
Libevent的日志默认输出是stdout,但是可以通过设置回调函数,将日志保存到文件中去。
static event_log_cb log_fn = NULL; void event_set_log_callback(event_log_cb cb) { log_fn = cb; }
上面是一个全局的回调函数,需要定制回调函数的时候调用一下 event_set_log_callback 方法就可以设置成为对应的回调函数。
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; default: severity_str = "???"; break; } (void)fprintf(stderr, "[%s] %s ", severity_str, msg); } }
在 log_fn 不为空的时候,就调用该回调函数,否则就使用系统默认的回回调函数,也就是直接打印输出到屏幕上面去。
Libevent 对外提供的API
void event_err(int eval, const char* fmt, ...) EV_CHECK_FMT(2, 3); void event_warn(const char* fmt, ...) EV_CHECK_FMT(1, 2); void event_errx(int eval, const char* fmt, ...) EV_CHECK_FMT(2, 3); void event_warnx(const char* fmt, ...) EV_CHECK_FMT(1, 2); void event_msgx(const char* fmt, ...) EV_CHECK_FMT(1, 2); void _event_debugx(const char* fmt, ...) EV_CHECK_FMT(1, 2);
static void _warn_helper(int severity, int log_errno, const char* fmt, va_list ap); static void event_log(int severity, const char* msg); void event_err(int eval, const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_ERR, errno, fmt, ap); va_end(ap); exit(eval); } void event_warn(const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_WARN, errno, fmt, ap); va_end(ap); } void event_errx(int eval, const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_ERR, -1, fmt, ap); va_end(ap); exit(eval); } void event_warnx(const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_WARN, -1, fmt, ap); va_end(ap); } void event_msgx(const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_MSG, -1, fmt, ap); va_end(ap); } void _event_debugx(const char* fmt, ...) { va_list ap; va_start(ap, fmt); _warn_helper(_EVENT_LOG_DEBUG, -1, fmt, ap); va_end(ap); } static void _warn_helper(int severity, int log_errno, const char* fmt, va_list ap) { char buf[1024]; size_t len; if (fmt != NULL) evutil_vsnprintf(buf, sizeof(buf), fmt, ap); else buf[0] = ‘