spdlog 个人封装,欢迎使用,共同探讨[通俗易懂]

spdlog 个人封装,欢迎使用,共同探讨[通俗易懂]#ifndef_MY_LOG_HPP_#define_MY_LOG_HPP_#include”spdlog/spdlog.h”#include”spdlog/sinks/basic_file_sink.h”//supportforbasicfilelogging#include”spdlog/sinks/rotating_file_sink.h”//suppo…

大家好,又见面了,我是你们的朋友全栈君。

#ifndef _MY_LOG_HPP_
#define _MY_LOG_HPP_

#include “spdlog/spdlog.h”
#include “spdlog/sinks/basic_file_sink.h” // support for basic file logging
#include “spdlog/sinks/rotating_file_sink.h” // support for rotating file logging
#include “spdlog/sinks/stdout_sinks.h”
#include “spdlog/sinks/stdout_color_sinks.h” // or “../stdout_sinks.h” if no colors needed
#include “spdlog/sinks/daily_file_sink.h”

class MyLog
{

public:
    static MyLog& GetInstance();
protected:
    MyLog();
    ~MyLog();
private:
    MyLog(const MyLog& rhs) {}
    MyLog& operator = (const MyLog& rhs) {}
public:
    /*
    trace = SPDLOG_LEVEL_TRACE,
    debug = SPDLOG_LEVEL_DEBUG,
    info = SPDLOG_LEVEL_INFO,
    warn = SPDLOG_LEVEL_WARN,
    err = SPDLOG_LEVEL_ERROR,
    critical = SPDLOG_LEVEL_CRITICAL,
    off = SPDLOG_LEVEL_OFF,
    */
    bool InitLogObject(int consolelevel=0, const int filelevel=0, int maxsize=1000, int backIndex=10,int isDay=1);
    auto& GetConsoleObject();
    auto& GetFileObject();

public:
    int m_isDay;
};
MyLog::MyLog()
{

}
MyLog::~MyLog()
{

    std::cout << “析构了” << std::endl;
}
MyLog& MyLog::GetInstance()
{

    static MyLog instance;
    return instance;
}
auto& MyLog::GetConsoleObject()
{

    return spdlog::get(“console”);
}
auto& MyLog::GetFileObject()
{

    if (m_isDay==1)
    {

        return spdlog::get(“daily_logger”);
    }
    return spdlog::get(“file_logger”);
}

bool MyLog::InitLogObject(int consolelevel, int filelevel,int maxsize,int backIndex,int isDay)
{

    try
    {

        m_isDay = isDay;
        auto console = spdlog::stdout_logger_mt(“console”);

        switch (consolelevel)
        {

        case 0:console->set_level(spdlog::level::trace); break;
        case 1:console->set_level(spdlog::level::debug); break;
        case 2:console->set_level(spdlog::level::info); break;
        case 3:console->set_level(spdlog::level::warn); break;
        case 4:console->set_level(spdlog::level::err); break;
        case 5:console->set_level(spdlog::level::critical); break;
        case 6:console->set_level(spdlog::level::off); break;
        default:
            console->set_level(spdlog::level::trace);
            break;
        }
        // 单位M 即:maxsize M
        auto file_logger = spdlog::rotating_logger_mt(“file_logger”, “logs/rotat.log”, 1024 * 1024 * maxsize, backIndex);
        auto daily_logger = spdlog::daily_logger_mt(“daily_logger”, “logs/daily.log”, 23, 59);
        switch (filelevel)
        {

        case 0:
        {

            file_logger->set_level(spdlog::level::trace); 
            daily_logger->set_level(spdlog::level::trace);
            break;
        }
        case 1:
        {

            file_logger->set_level(spdlog::level::debug);
            daily_logger->set_level(spdlog::level::debug);
            break;
        }
        case 2:
        {

            file_logger->set_level(spdlog::level::info);
            daily_logger->set_level(spdlog::level::info);
            break;
        }
        case 3:
        {

            file_logger->set_level(spdlog::level::warn);
            daily_logger->set_level(spdlog::level::warn);
            break;
        }
        case 4:
        {

            file_logger->set_level(spdlog::level::err);
            daily_logger->set_level(spdlog::level::err);
            break;
        }
        case 5:
        {

            file_logger->set_level(spdlog::level::critical);
            daily_logger->set_level(spdlog::level::critical);
            break;
        }
        case 6:
        {

            file_logger->set_level(spdlog::level::off);
            daily_logger->set_level(spdlog::level::off);
            break;
        }
        default:
        {

            file_logger->set_level(spdlog::level::trace);
            daily_logger->set_level(spdlog::level::trace);
            break;
        }
        }

        return true;
    
    }
    catch (const spdlog::spdlog_ex& ex)
    {

        std::cout << “Log initialization failed: ” << ex.what() << std::endl;
    }
    return true;
}
#endif // !_MY_LOG_HPP_

//调用代码片段

MyLog::GetInstance().InitLogObject();

…….

std::stringstream ss;
ss << __FILE__ << “:” << __FUNCTION__ << “:” << __LINE__ << “:”;
ss<< std::this_thread::get_id();
MyLog::GetInstance().GetFileObject()->info(“日志:{},{}”, “测试文件”, ss.str().data());

MyLog::GetInstance().GetConsoleObject()->info(“日志:{},{}”, “测试控制台”, ss.str().data());

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152321.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql—mysql中的整数和字符串类型

    mysql—mysql中的整数和字符串类型

    2020年11月12日
    189
  • 安卓获取sha1_android获取真实时间

    安卓获取sha1_android获取真实时间此文介绍AndroidStudio中获取SHA1的方法。获取开发中的SHA1:在右侧找到菜单栏“Gradle”—>”APP名”—>“Tasks”—>“android”—>双击“signReport”即可。这时生成出来的只是debug的SHA1和MD5值:获取:获取发布版本的SHA1:请自行生成签名文件,打开androidst…

    2022年8月11日
    3
  • Cefsharp_ceph nfs

    Cefsharp_ceph nfs文章目录0.简介1.安装2.H.264支持3.加载本地HTML文件4.多个窗口显示浏览器0.简介CefSharp,简单来说就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件。它支持HTML5。CefSharp的功能比较复杂,以下只介绍一些我觉得比较重要的并且目前经常用的功能,此“挑食”之意也。1.安装CefSharp的安装过程如下:打开VisualStduio,新建一个Windows窗体应用(.NETFramework);在“工具”

    2022年9月19日
    0
  • 详解C/C++中volatile关键字「建议收藏」

    详解C/C++中volatile关键字「建议收藏」一、volatile介绍volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:这段…

    2022年6月1日
    25
  • vc 获取月份的天数_根据距离1900年1月1日的天数(0起始),计算这一天的日期(年,月,日)…

    vc 获取月份的天数_根据距离1900年1月1日的天数(0起始),计算这一天的日期(年,月,日)…我的代码,算法不优美,但结果正确^_^#include#include#includevoidfoo(int&year,int&month,int&day){year=1900;month=1;day+=0;for(intn;n=(((year%4==0&&year%100!=0)||(year%400==0))…

    2022年8月12日
    4
  • 深信服SCSA认证复习笔记三

    深信服SCSA认证复习笔记三深信服复习笔记三基础题目:1.最大传输单元(MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。是包或者帧的最大长度,一般以字节记。如果MTU过大,则路由器会拒绝此包,并下发通知源节点2.Telnet是常用的远程控制Web服务器的方法。这个可以判断网络是不是畅通的这一种方法,ping命名不能准确表示是不是在可以上网。3.防火墙:传统防火墙(包过滤防火墙)判断信息(五元组)工作范围(网络层,传输层)4.防火墙部署模式:路由模式透明模式虚拟网线模式混合模式旁

    2022年6月20日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号