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());

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mac如何装windows系统_bootcamp您的磁盘未能分区

    mac如何装windows系统_bootcamp您的磁盘未能分区问题:启动磁盘不能被分区或恢复成单个分区苹果电脑装了双系统,但是一直用的mac系统,所以打算把windows卸载。看到网上说直接用Bootcamp助理卸载就行,但是点“继续”的时候出现问题:启动磁盘不能被分区或恢复成单个分区。接下来就是要解决这个问题啦!可以看到我现在有三个盘,MachintoshHD为mac系统所在盘,这是我要保留的,另外两个是装windows分配的盘,所以需要卸载这…

  • VUE打包图片加载失败问题

    VUE打包图片加载失败问题昨天的搬运工,今天的小雷锋。 问题描述,使用VUE-CLI打包后,出现图片无法显示情况。这里可能存在两种情况:静态资源CSS中使用图片作为背景图片使用时。 在JS中生成图片标签后,再设置图片路径时。 当你吃着火锅唱着歌,一路npm-run-dev都相安无事的时候,打包完事后,发现突然图片显示异常了!如果你观察后,你会发现组件中使用的img标签都没任何问题,我们css中的背景图片…

  • JAVA打印数组的四种方法

    JAVA打印数组的四种方法JAVA打印数组的四种方法探究无聊看模块Integer.java源码时(IDEA中鼠标悬浮在Integer上按ctrl+alt可以转到类源码),因为刚学java,想尝试着仿照python的方法打印数组:finalint[]arr1={1,2,3,4,5};System.out.println(arr1);只打印出了地址:于是上网搜了下打印数组内容的正确方法,整理如下:1.循环打印数组String[]arr2={“dashi”,”baiqun”,”wangxiang”

  • Jupyter Notebook: ‘_xsrf’ argument missing from POST 解决方案

    Jupyter Notebook: ‘_xsrf’ argument missing from POST 解决方案JupyterNotebook:’_xsrf’argumentmissingfromPOST解决方案问题描述:在JupyterNotebook里跑了几天的代码,notebook右上角突然显示’_xsrf’argumentmissingfromPOST,无法保存现有file也无法stop或runcell。命令行显示报错信息如下://Anhighlighted…

  • android签名命令行,Android系统签名位置及命令

    android签名命令行,Android系统签名位置及命令app需要使用系统的权限在AndroidManifest.xml中声明了系统全下申明了系统权限android:sharedUserId=”android.uid.system”1.找到平台签名文件“platform.pk8”和“platform.x509.pem”文件位置android/build/target/product/security/2.签名工具“signapk.jar”位置…

  • ssti模板注入 命令执行_access注入绕过

    ssti模板注入 命令执行_access注入绕过http://xmctf.top:8962/?name={{%22%22[%22\x5f\x5fclass\x5f\x5f%22][“\x5F\x5Fbase\x5F\x5F”][“\x5F\x5Fsubclasses\x5F\x5F”]()[233][“\x5F\x5Finit\x5F\x5F”][“\x5F\x5Fglobals\x5F\x5F”][“\x5F\x5Fbuiltins\x5F\x5F”][‘eval’](“\x5F\x5Fimport\x5F\x5F(‘os’))”)}}

发表回复

您的电子邮箱地址不会被公开。

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