利用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_infoutil_log_noticeutil_log_warnutil_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)
posted @ 2022-05-15 23:26  shelmean  阅读(253)  评论(0编辑  收藏  举报