Skip to content

Commit

Permalink
feat: update log
Browse files Browse the repository at this point in the history
  • Loading branch information
shuai132 committed Sep 15, 2023
1 parent 9f8c93b commit eb44d14
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 61 deletions.
134 changes: 74 additions & 60 deletions detail/log.h
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
// 可配置项(默认未定义)
// ASIO_NET_LOG_NDEBUG 关闭ASIO_NET_LOGD的输出
// ASIO_NET_LOG_SHOW_VERBOSE 显示ASIO_NET_LOGV的输出
// ASIO_NET_LOG_DISABLE_COLOR 禁用颜色显示
// ASIO_NET_LOG_LINE_END_CRLF 默认是\n结尾 添加此宏将以\r\n结尾
// ASIO_NET_LOG_FOR_MCU 更适用于MCU环境
// ASIO_NET_LOG_NOT_EXIT_ON_FATAL FATAL默认退出程序 添加此宏将不退出
// ASIO_NET_LOG_DISABLE_ALL 关闭所有日志
// L_O_G_DISABLE_ALL(关闭所有日志 包含所有库)
// 1. 全局控制
// L_O_G_NDEBUG 关闭DEBUG日志(默认依据NDEBUG自动判断)
// L_O_G_SHOW_DEBUG 强制开启DEBUG日志
// L_O_G_DISABLE_ALL 关闭所有日志
// L_O_G_DISABLE_COLOR 禁用颜色显示
// L_O_G_LINE_END_CRLF 默认是\n结尾 添加此宏将以\r\n结尾
// L_O_G_FOR_MCU 更适用于MCU环境
// L_O_G_NOT_EXIT_ON_FATAL FATAL默认退出程序 添加此宏将不退出
// L_O_G_SHOW_FULL_PATH 显示文件绝对路径
//
// c++11环境默认打开以下内容
// ASIO_NET_LOG_ENABLE_THREAD_SAFE 线程安全
// ASIO_NET_LOG_ENABLE_THREAD_ID 显示线程ID
// ASIO_NET_LOG_ENABLE_DATE_TIME 显示日期
// L_O_G_ENABLE_THREAD_SAFE 线程安全
// L_O_G_ENABLE_THREAD_ID 显示线程ID
// L_O_G_ENABLE_DATE_TIME 显示日期
// 分别可通过下列禁用
// ASIO_NET_LOG_DISABLE_THREAD_SAFE
// ASIO_NET_LOG_DISABLE_THREAD_ID
// ASIO_NET_LOG_DISABLE_DATE_TIME
// L_O_G_DISABLE_THREAD_SAFE
// L_O_G_DISABLE_THREAD_ID
// L_O_G_DISABLE_DATE_TIME
// 可通过`L_O_G_GET_TID_CUSTOM`自定义获取线程ID的实现
//
// 其他配置项
// ASIO_NET_LOG_PRINTF_IMPL 定义输出实现(默认使用printf)
// 并添加形如int ASIO_NET_LOG_PRINTF_IMPL(const char *fmt, ...)的实现
// 2. 自定义实现
// L_O_G_PRINTF_CUSTOM 自定义输出实现
// 并添加实现`int L_O_G_PRINTF_CUSTOM(const char *fmt, ...)`
//
// 在库中使用时
// 1. 修改此文件中的`ASIO_NET_LOG`以包含库名前缀(全部替换即可)
// 2. 取消这行注释(以屏蔽DEBUG日志): #define ASIO_NET_LOG_IN_LIB
// 库中可配置项
// ASIO_NET_LOG_SHOW_DEBUG 开启ASIO_NET_LOGD的输出
//
// 非库中使用时
// ASIO_NET_LOGD的输出在debug时打开 release时关闭(依据NDEBUG宏)
// 3. 在库中使用时
// 3.1. 修改此文件中的`ASIO_NET_LOG`以包含库名前缀(全部替换即可)
// 3.2. 取消这行注释(以屏蔽DEBUG日志): #define ASIO_NET_LOG_IN_LIB
// 3.3. 库可配置项
// ASIO_NET_LOG_SHOW_DEBUG 开启ASIO_NET_LOGD的输出(非库中依据NDEBUG宏)
// ASIO_NET_LOG_SHOW_VERBOSE 显示ASIO_NET_LOGV的输出
// ASIO_NET_LOG_DISABLE_ALL 关闭所有日志

#pragma once

Expand Down Expand Up @@ -58,16 +58,16 @@
#include <cstdlib>
#if __cplusplus >= 201103L

#if !defined(ASIO_NET_LOG_DISABLE_THREAD_SAFE) && !defined(ASIO_NET_LOG_ENABLE_THREAD_SAFE)
#define ASIO_NET_LOG_ENABLE_THREAD_SAFE
#if !defined(L_O_G_DISABLE_THREAD_SAFE) && !defined(L_O_G_ENABLE_THREAD_SAFE)
#define L_O_G_ENABLE_THREAD_SAFE
#endif

#if !defined(ASIO_NET_LOG_DISABLE_THREAD_ID) && !defined(ASIO_NET_LOG_ENABLE_THREAD_ID)
#define ASIO_NET_LOG_ENABLE_THREAD_ID
#if !defined(L_O_G_DISABLE_THREAD_ID) && !defined(L_O_G_ENABLE_THREAD_ID)
#define L_O_G_ENABLE_THREAD_ID
#endif

#if !defined(ASIO_NET_LOG_DISABLE_DATE_TIME) && !defined(ASIO_NET_LOG_ENABLE_DATE_TIME)
#define ASIO_NET_LOG_ENABLE_DATE_TIME
#if !defined(L_O_G_DISABLE_DATE_TIME) && !defined(L_O_G_ENABLE_DATE_TIME)
#define L_O_G_ENABLE_DATE_TIME
#endif

#endif
Expand All @@ -76,35 +76,39 @@
#include <stdlib.h>
#endif

#ifdef ASIO_NET_LOG_LINE_END_CRLF
#ifdef L_O_G_LINE_END_CRLF
#define ASIO_NET_LOG_LINE_END "\r\n"
#else
#define ASIO_NET_LOG_LINE_END "\n"
#endif

#ifdef ASIO_NET_LOG_NOT_EXIT_ON_FATAL
#ifdef L_O_G_NOT_EXIT_ON_FATAL
#define ASIO_NET_LOG_EXIT_PROGRAM()
#else
#ifdef ASIO_NET_LOG_FOR_MCU
#ifdef L_O_G_FOR_MCU
#define ASIO_NET_LOG_EXIT_PROGRAM() do{ for(;;); } while(0)
#else
#define ASIO_NET_LOG_EXIT_PROGRAM() exit(EXIT_FAILURE)
#endif
#endif

#ifdef L_O_G_SHOW_FULL_PATH
#define ASIO_NET_LOG_BASE_FILENAME (__FILE__)
#else
#ifdef __FILE_NAME__
#define ASIO_NET_LOG_BASE_FILENAME (__FILE_NAME__)
#else
#define ASIO_NET_LOG_BASE_FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__)
#endif
#endif

#define ASIO_NET_LOG_WITH_COLOR

#if defined(_WIN32) || (defined(__ANDROID__) && !defined(ANDROID_STANDALONE)) || defined(ASIO_NET_LOG_FOR_MCU)
#if defined(_WIN32) || (defined(__ANDROID__) && !defined(ANDROID_STANDALONE)) || defined(L_O_G_FOR_MCU)
#undef ASIO_NET_LOG_WITH_COLOR
#endif

#ifdef ASIO_NET_LOG_DISABLE_COLOR
#ifdef L_O_G_DISABLE_COLOR
#undef ASIO_NET_LOG_WITH_COLOR
#endif

Expand All @@ -130,21 +134,23 @@

#define ASIO_NET_LOG_END ASIO_NET_LOG_COLOR_END ASIO_NET_LOG_LINE_END

#ifndef L_O_G_PRINTF
#ifndef ASIO_NET_LOG_PRINTF_DEFAULT
#if defined(__ANDROID__) && !defined(ANDROID_STANDALONE)
#include <android/log.h>
#define ASIO_NET_LOG_PRINTF(...) __android_log_print(ANDROID_L##OG_DEBUG, "ASIO_NET_LOG", __VA_ARGS__)
#define ASIO_NET_LOG_PRINTF_DEFAULT(...) __android_log_print(ANDROID_L##OG_DEBUG, "ASIO_NET_LOG", __VA_ARGS__)
#else
#define ASIO_NET_LOG_PRINTF(...) printf(__VA_ARGS__)
#define ASIO_NET_LOG_PRINTF_DEFAULT(...) printf(__VA_ARGS__)
#endif
#endif

#ifndef ASIO_NET_LOG_PRINTF_IMPL
#ifndef L_O_G_PRINTF_CUSTOM
#ifdef __cplusplus
#include <cstdio>
#else
#include <stdio.h>
#endif

#ifdef ASIO_NET_LOG_ENABLE_THREAD_SAFE
#ifdef L_O_G_ENABLE_THREAD_SAFE
#ifndef L_O_G_NS_MUTEX
#define L_O_G_NS_MUTEX L_O_G_NS_MUTEX
#include <mutex>
Expand All @@ -159,23 +165,26 @@ static std::mutex& mutex() {
}
};
#endif
#define ASIO_NET_LOG_PRINTF_IMPL(...) { \
#define L_O_G_PRINTF(...) { \
std::lock_guard<std::mutex> lock(L_O_G_NS_MUTEX::mutex()); \
ASIO_NET_LOG_PRINTF(__VA_ARGS__); \
ASIO_NET_LOG_PRINTF_DEFAULT(__VA_ARGS__); \
}
#else
#define ASIO_NET_LOG_PRINTF_IMPL(...) ASIO_NET_LOG_PRINTF(__VA_ARGS__)
#define L_O_G_PRINTF(...) ASIO_NET_LOG_PRINTF_DEFAULT(__VA_ARGS__)
#endif

#else
extern int ASIO_NET_LOG_PRINTF_IMPL(const char *fmt, ...);
extern int L_O_G_PRINTF_CUSTOM(const char *fmt, ...);
#define L_O_G_PRINTF(...) L_O_G_PRINTF_CUSTOM(__VA_ARGS__)
#endif
#endif

#ifdef ASIO_NET_LOG_ENABLE_THREAD_ID
#ifdef L_O_G_ENABLE_THREAD_ID
#ifndef L_O_G_NS_GET_TID
#define L_O_G_NS_GET_TID L_O_G_NS_GET_TID
#include <cstdint>
#ifdef _WIN32
#ifdef L_O_G_GET_TID_CUSTOM
extern uint32_t L_O_G_GET_TID_CUSTOM();
#elif _WIN32
#include <processthreadsapi.h>
struct L_O_G_NS_GET_TID {
static inline uint32_t get_tid() {
Expand All @@ -201,14 +210,19 @@ static inline uint32_t get_tid() {
};
#endif
#endif
#ifdef L_O_G_GET_TID_CUSTOM
#define ASIO_NET_LOG_THREAD_LABEL "%u "
#define ASIO_NET_LOG_THREAD_VALUE ,L_O_G_GET_TID_CUSTOM()
#else
#define ASIO_NET_LOG_THREAD_LABEL "%u "
#define ASIO_NET_LOG_THREAD_VALUE ,L_O_G_NS_GET_TID::get_tid()
#endif
#else
#define ASIO_NET_LOG_THREAD_LABEL
#define ASIO_NET_LOG_THREAD_VALUE
#endif

#ifdef ASIO_NET_LOG_ENABLE_DATE_TIME
#ifdef L_O_G_ENABLE_DATE_TIME
#include <chrono>
#include <sstream>
#include <iomanip> // std::put_time
Expand All @@ -232,25 +246,25 @@ static inline std::string get_time() {
#define ASIO_NET_LOG_TIME_VALUE
#endif

#define ASIO_NET_LOG(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_GREEN ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[*]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGT(tag, fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_BLUE ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[" tag "]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGI(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_YELLOW ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[I]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGW(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_CARMINE ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[W]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); } while(0) // NOLINT(bugprone-lambda-function-name)
#define ASIO_NET_LOGE(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_RED ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[E]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); } while(0) // NOLINT(bugprone-lambda-function-name)
#define ASIO_NET_LOGF(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_CYAN ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[!]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); ASIO_NET_LOG_EXIT_PROGRAM(); } while(0) // NOLINT(bugprone-lambda-function-name)
#define ASIO_NET_LOG(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_GREEN ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[*]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGT(tag, fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_BLUE ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[" tag "]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGI(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_YELLOW ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[I]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGW(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_CARMINE ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[W]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); } while(0) // NOLINT(bugprone-lambda-function-name)
#define ASIO_NET_LOGE(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_RED ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[E]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); } while(0) // NOLINT(bugprone-lambda-function-name)
#define ASIO_NET_LOGF(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_CYAN ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[!]: %s:%d [%s] " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, __func__, ##__VA_ARGS__); ASIO_NET_LOG_EXIT_PROGRAM(); } while(0) // NOLINT(bugprone-lambda-function-name)

#if defined(ASIO_NET_LOG_IN_LIB) && !defined(ASIO_NET_LOG_SHOW_DEBUG) && !defined(ASIO_NET_LOG_NDEBUG)
#if defined(ASIO_NET_LOG_IN_LIB) && !defined(ASIO_NET_LOG_SHOW_DEBUG) && !defined(L_O_G_NDEBUG)
#define ASIO_NET_LOG_NDEBUG
#endif

#if defined(NDEBUG) || defined(ASIO_NET_LOG_NDEBUG)
#if (defined(NDEBUG) || defined(ASIO_NET_LOG_NDEBUG)) && !defined(L_O_G_SHOW_DEBUG)
#define ASIO_NET_LOGD(fmt, ...) ((void)0)
#else
#define ASIO_NET_LOGD(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_DEFAULT ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[D]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGD(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_DEFAULT ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[D]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#endif

#if defined(ASIO_NET_LOG_SHOW_VERBOSE)
#define ASIO_NET_LOGV(fmt, ...) do{ ASIO_NET_LOG_PRINTF_IMPL(ASIO_NET_LOG_COLOR_DEFAULT ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[V]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#define ASIO_NET_LOGV(fmt, ...) do{ L_O_G_PRINTF(ASIO_NET_LOG_COLOR_DEFAULT ASIO_NET_LOG_TIME_LABEL ASIO_NET_LOG_THREAD_LABEL "[V]: %s:%d " fmt ASIO_NET_LOG_END ASIO_NET_LOG_TIME_VALUE ASIO_NET_LOG_THREAD_VALUE, ASIO_NET_LOG_BASE_FILENAME, __LINE__, ##__VA_ARGS__); } while(0)
#else
#define ASIO_NET_LOGV(fmt, ...) ((void)0)
#endif
Expand Down
2 changes: 1 addition & 1 deletion rpc/rpc_core
Submodule rpc_core updated 1 files
+74 −60 src/detail/log.h

0 comments on commit eb44d14

Please sign in to comment.