便捷打印封装

文章目录


根据需要,将 __owo_log定义为 printkprintf

#ifndef __OWO_LOG_H__
#define __OWO_LOG_H__

#ifndef owo_logfmt
#define owo_logfmt(fmt)        fmt
#endif

#ifndef __func__
#define __func__                __FUNCTION__
#endif

enum owo_loglevel {
    OWO_NONE    = -1,
    OWO_ALWAYS  = -1,
    OWO_ERR     = 0,
    OWO_WARN,
    OWO_INFO,
    OWO_DBG,
    OWO_DBG2,
    OWO_ALL,
};

#if 1
#define __owo_log(fmt, ...)     printk(KERN_CRIT fmt, ##__VA_ARGS__)
#else
#define __owo_log(fmt, ...)     printf(fmt, ##__VA_ARGS__)
#endif

#define __ts                    0
#define __tms                   0

#ifndef module_param
#define module_param(...)
#endif

/* module */
#define owo_loglevel_param(name, defval)                \
    int owo_loglevel_##name = defval;                   \
    module_param(owo_loglevel_##name, int, 0644);

/* each file */
#define owo_loglevel_local(name)                        \
    extern int owo_loglevel_##name;                     \
    static int *__owo_loglevel_local =                  \
        &owo_loglevel_##name;

#define owo_log_level           (*__owo_loglevel_local)
#define owo_logn_raw(level, fmt, ...)                   \
    do {                                                \
        if (level <= owo_log_level) {                   \
            __owo_log(fmt, ##__VA_ARGS__);              \
        }                                               \
    } while(0)

#define owo_logn(level, fmt, ...) \
    owo_logn_raw(level, owo_logfmt("[" #level "]" fmt), ##__VA_ARGS__)

#define owo_logn_fl(level, fmt, ...) \
	owo_logn(level, "[%s:%d] " fmt, __func__, __LINE__, ##__VA_ARGS__)

#define owo_logn_t(level, fmt, ...) \
	owo_logn(level, "[%2u.%03u] " fmt, __ts, __tms, ##__VA_ARGS__)

#define owo_logn_flt(level, fmt, ...) \
	owo_logn(level, "[%s:%d][%2u.%03u] " fmt, \
            __func__, __LINE__, __ts, __tms, ##__VA_ARGS__)

#define owo_logn_tfl(level, fmt, ...) \
	owo_logn(level, "[%2u.%03u][%s:%d] " fmt, \
            __ts, __tms, __func__, __LINE__, ##__VA_ARGS__)

#define owo_logn_on(level, cond, fmt, ...)  \
    do {if (!!(cond)) {owo_logn_fl(level, "<%s> " fmt, #cond, ##__VA_ARGS__);}} while(0)

#define owo_logn_cont    owo_logn_raw


#define owo_err_raw(fmt, ...)       owo_logn_raw(OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err(fmt, ...)           owo_logn    (OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err_fl(fmt, ...)        owo_logn_fl (OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err_t(fmt, ...)         owo_logn_t  (OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err_flt(fmt, ...)       owo_logn_flt(OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err_tfl(fmt, ...)       owo_logn_tfl(OWO_ERR, fmt, ##__VA_ARGS__)
#define owo_err_on(cond, fmt, ...)  owo_logn_on (OWO_ERR, cond, fmt, ##__VA_ARGS__)
#define owo_err_cont(fmt, ...)      owo_logn_cont(OWO_ERR, fmt, ##__VA_ARGS__)


#define owo_warn_raw(fmt, ...)      owo_logn_raw(OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn(fmt, ...)          owo_logn    (OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn_fl(fmt, ...)       owo_logn_fl (OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn_t(fmt, ...)        owo_logn_t  (OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn_flt(fmt, ...)      owo_logn_flt(OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn_tfl(fmt, ...)      owo_logn_tfl(OWO_WARN, fmt, ##__VA_ARGS__)
#define owo_warn_on(cond, fmt, ...) owo_logn_on (OWO_WARN, cond, fmt, ##__VA_ARGS__)
#define owo_warn_cont(fmt, ...)     owo_logn_cont(OWO_WARN, fmt, ##__VA_ARGS__)


#define owo_info_raw(fmt, ...)      owo_logn_raw(OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info(fmt, ...)          owo_logn    (OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info_fl(fmt, ...)       owo_logn_fl (OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info_t(fmt, ...)        owo_logn_t  (OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info_flt(fmt, ...)      owo_logn_flt(OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info_tfl(fmt, ...)      owo_logn_tfl(OWO_INFO, fmt, ##__VA_ARGS__)
#define owo_info_on(cond, fmt, ...) owo_logn_on (OWO_INFO, cond, fmt, ##__VA_ARGS__)
#define owo_info_cont(fmt, ...)     owo_logn_cont(OWO_INFO, fmt, ##__VA_ARGS__)


#define owo_dbg_raw(fmt, ...)       owo_logn_raw(OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg(fmt, ...)           owo_logn    (OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg_fl(fmt, ...)        owo_logn_fl (OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg_t(fmt, ...)         owo_logn_t  (OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg_flt(fmt, ...)       owo_logn_flt(OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg_tfl(fmt, ...)       owo_logn_tfl(OWO_DBG, fmt, ##__VA_ARGS__)
#define owo_dbg_on(cond, fmt, ...)  owo_logn_on (OWO_DBG, cond, fmt, ##__VA_ARGS__)
#define owo_dbg_cont(fmt, ...)      owo_logn_cont(OWO_DBG, fmt, ##__VA_ARGS__)


#define owo_dbg2_raw(fmt, ...)      owo_logn_raw(OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2(fmt, ...)          owo_logn    (OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2_fl(fmt, ...)       owo_logn_fl (OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2_t(fmt, ...)        owo_logn_t  (OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2_flt(fmt, ...)      owo_logn_flt(OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2_tfl(fmt, ...)      owo_logn_tfl(OWO_DBG2, fmt, ##__VA_ARGS__)
#define owo_dbg2_on(cond, fmt, ...) owo_logn_on (OWO_DBG2, cond, fmt, ##__VA_ARGS__)
#define owo_dbg2_cont(fmt, ...)     owo_logn_cont(OWO_DBG2, fmt, ##__VA_ARGS__)

#endif
上一篇:左神算法-基础03


下一篇:大根堆、小根堆的应用—找中位数、O(logn)实现(你是不是只会排序呀,还不快点进来看看)