利用syslog记录日志的简单日志函数
日志记录函数实现
如 log.c
#include <syslog.h>
#include "log.h"
int g_log_level = LOG_INFO;
/**
* @Desc: 日志记录函数,不要直接调用
*
* @log_level: 日志等级
* @fmt: 打印格式
*/
void _util_log(int log_level, const char *fmt, ...)
{
va_list vargs;
if (log_level < g_log_level) {
va_start(vargs, fmt);
#ifdef SYSLOG
vsyslog(LOG_PID | log_level, fmt, vargs);
#else
(void)vprintf(fmt, vargs);
#endif
va_end(vargs);
}
}
使用
使用日志函数时,不直接调用 _util_log
函数,而是调用宏函数 util_log_info
、util_log_notice
、util_log_warn
和 util_log_err
#include <syslog.h>
/**
* 日志信息相关宏
*/
#define FG_CLEAR "\033[0m" /* 清除颜色 */
#define FG_RED "\033[0;31m" /* 红色 */
#define FG_GREEN "\033[0;32m" /* 绿色 */
#define FG_YELLOW "\033[0;33m" /* 黄色 */
#define FG_BLUE "\033[0;34m" /* 蓝色 */
#ifndef SYSLOG
#define SYSLOG
#endif /* !SYSLOG */
void _util_log(int log_level, const char *fmt, ...);
#define util_log_info(fmt, ...) \
do { \
_util_log(LOG_INFO, FG_GREEN "[proc name][%s](%d): " fmt FG_CLEAR"\n", __FUNCTION__, __LINE__, ##__VA_ARGS__); \
} while(0)
#define util_log_notice(fmt, ...) \
do { \
_util_log(LOG_NOTICE, FG_BLUE "[proc name][%s](%d): " fmt FG_CLEAR"\n", __FUNCTION__, __LINE__, ##__VA_ARGS__); \
} while(0)
#define util_log_warn(fmt, ...) \
do { \
_util_log(LOG_WARNING, FG_YELLOW"[proc name][%s](%d): " fmt FG_CLEAR"\n", __FUNCTION__, __LINE__, ##__VA_ARGS__); \
} while(0)
#define util_log_err(fmt, ...) \
do { \
_util_log(LOG_ERR, FG_RED "[proc name][%s](%d): " fmt FG_CLEAR"\n", __FUNCTION__, __LINE__, ##__VA_ARGS__); \
} while(0)