C++线程安全的日志接口-创新互联

C++ 线程安全的日志接口

线程不安全版本旧版(对接口的技术点进行详解)链接:https://blog.csdn.net/qq135595696/article/details/127467597

创新互联是一家专业提供江西企业网站建设,专注与成都网站制作、成都做网站、H5网站设计、小程序制作等业务。10年已为江西众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
Common.h
#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://scyanting.com/article/dojsjd.html