DemoPublic/Common/使用_Define_宏自定义_Log_系统.md

2.2 KiB

使用 Define 宏自定义 Log 系统

C/C++ 语言简易版本

注意 "] " 前后要有空格,否则编译错误。

#include <stdio.h>

#define LOG_DBG 0
#define LOG_INF 1
#define LOG_WAR 2
#define LOG_ERR 3
#define LOG_NOP 4
#define LOG_LEVEL LOG_DBG

#if (LOG_LEVEL<=LOG_DBG)
#define DLog(tag, ...) printf("[DBG|"#tag "] " __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_DBG)
#define DLog(tag, ...)
#endif  // (LOG_LEVEL<LOG_DBG)

#if (LOG_LEVEL<=LOG_INF)
#define ILog(tag, ...) printf("[INF|"#tag "] " __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_INF)
#define ILog(tag, ...)
#endif  // (LOG_LEVEL<LOG_INF)

#if (LOG_LEVEL<=LOG_WAR)
#define WLog(tag, ...) printf("[WAR|"#tag "] " __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_WAR)
#define WLog(tag, ...)
#endif  // (LOG_LEVEL<LOG_WAR)

#if (LOG_LEVEL<=LOG_ERR)
#define ELog(tag, ...) printf("[ERR|"#tag "] " __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_ERR)
#define ELog(tag, ...)
#endif  // (LOG_LEVEL<LOG_ERR)

C++ 带类和函数的扩展版

#include <stdio.h>

#define LOG_DBG 0
#define LOG_INF 1
#define LOG_WAR 2
#define LOG_ERR 3
#define LOG_NOP 4
#define LOG_LEVEL LOG_DBG

#if (LOG_LEVEL<=LOG_DBG)
#define DMsg(msg) printf("[DBG|%s]" msg, __PRETTY_FUNCTION__)
#define DLog(fmt, ...) printf("[DBG|%s]" fmt, __PRETTY_FUNCTION__, __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_DBG)
#define DMsg(msg)
#define DLog(fmt, ...)
#endif  // (LOG_LEVEL<LOG_DBG)

#if (LOG_LEVEL<=LOG_INF)
#define IMsg(msg) printf("[INF|%s]" msg, __PRETTY_FUNCTION__)
#define ILog(fmt, ...) printf("[INF|%s]" fmt, __PRETTY_FUNCTION__, __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_INF)
#define IMsg(msg)
#define ILog(fmt, ...)
#endif  // (LOG_LEVEL<LOG_INF)

#if (LOG_LEVEL<=LOG_WAR)
#define WMsg(msg) printf("[WAR|%s]" msg, __PRETTY_FUNCTION__)
#define WLog(fmt, ...) printf("[WAR|%s]" fmt, __PRETTY_FUNCTION__, __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_WAR)
#define WMsg(msg)
#define WLog(fmt, ...)
#endif  // (LOG_LEVEL<LOG_WAR)

#if (LOG_LEVEL<=LOG_ERR)
#define EMsg(msg) printf("[ERR|%s]" msg, __PRETTY_FUNCTION__)
#define ELog(fmt, ...) printf("[ERR|%s]" fmt, __PRETTY_FUNCTION__, __VA_ARGS__)
#else   // !(LOG_LEVEL<LOG_ERR)
#define EMsg(msg)
#define ELog(fmt, ...)
#endif  // (LOG_LEVEL<LOG_ERR)