C++线程安全的日志接口-创新互联
C++ 线程安全的日志接口
文章题目:C++线程安全的日志接口-创新互联
分享路径:http://myzitong.com/article/dojsjd.html
Common.h线程不安全版本旧版(对接口的技术点进行详解)链接:https://blog.csdn.net/qq135595696/article/details/127467597
创新互联是一家专业提供江西企业网站建设,专注与成都网站制作、成都做网站、H5网站设计、小程序制作等业务。10年已为江西众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
#pragma once
enum class NET_UV_LOG_TYPE {NET_UV_LOG_INFO,
NET_UV_LOG_WARNING,
NET_UV_LOG_ERROR,
NET_UV_LOG_FATAL
};
//线程安全日志接口
void NetUVLog(NET_UV_LOG_TYPE type, const char* pFunc,
int len, const char* format, ...);
//线程安全日志接口宏定义
#define NET_UV_LOG_INFO(format, ...) \
NetUVLog(NET_UV_LOG_TYPE::NET_UV_LOG_INFO, __FUNCTION__, \
__LINE__, format, ##__VA_ARGS__)
#define NET_UV_LOG_WARNING(format, ...) \
NetUVLog(NET_UV_LOG_TYPE::NET_UV_LOG_WARNING, __FUNCTION__, \
__LINE__, format, ##__VA_ARGS__)
#define NET_UV_LOG_ERROR(format, ...) \
NetUVLog(NET_UV_LOG_TYPE::NET_UV_LOG_ERROR, __FUNCTION__, \
__LINE__, format, ##__VA_ARGS__)
#define NET_UV_LOG_FATAL(format, ...) \
NetUVLog(NET_UV_LOG_TYPE::NET_UV_LOG_FATAL,__FUNCTION__, \
__LINE__, format, ##__VA_ARGS__)
Common.cpp#include "Common.h"
static const char* gs_netUvLogName[4] = {"INFO",
"WARNING",
"ERROR",
"FATAL"
};
static std::mutex gs_printfMutex;
static void _SetColor(unsigned short forecolor = 4,
unsigned short backgroudcolor = 0) {HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //获取缓冲区句柄
SetConsoleTextAttribute(hCon, forecolor | backgroudcolor); //设置文本及背景色
}
//线程安全日志接口
void NET_UV::NetUVLog(NET_UV_LOG_TYPE type, const char* pFunc,
int len, const char* format, ...) {va_list args;
time_t timer;
char userData[LOG_BUF_LEN];
char logTime[TIME_BUF_LEN];
std::string logInfo;
va_start(args, format);
vsnprintf(userData, LOG_BUF_LEN, format, args);
va_end(args);
time(&timer);
strftime(logTime, TIME_BUF_LEN, "%Y-%m-%d %H:%M:%S", localtime(&timer));
logInfo = logTime;
logInfo.append(" [NET-UV]-[");
logInfo.append(gs_netUvLogName[(int)type]);
logInfo.append("] ");
//函数名
logInfo.append("[");
logInfo.append(pFunc);
logInfo.append("] ");
//行号
logInfo.append("[");
logInfo.append(std::to_string(len));
logInfo.append("] ");
logInfo.append(userData);
//默认颜色
_SetColor(FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN | FOREGROUND_BLUE);
if (type == NET_UV_LOG_TYPE::NET_UV_LOG_ERROR) {//设置红色
_SetColor(FOREGROUND_INTENSITY, FOREGROUND_RED);
}
else if (type == NET_UV_LOG_TYPE::NET_UV_LOG_INFO) {//设置绿色
_SetColor(FOREGROUND_INTENSITY, FOREGROUND_GREEN);
}
do {std::lock_guard__(gs_printfMutex);
printf("%s", logInfo.c_str());
} while (false);
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章题目:C++线程安全的日志接口-创新互联
分享路径:http://myzitong.com/article/dojsjd.html