文章目录
根据需要,将
__owo_log
定义为
printk
或
printf
。
#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