C++ 跨平台日志库 spdlog 好用的日志库使用与封装推荐 同时打印msvc OutputDebug、log file以及控制台console的输出

https://github.com/gabime/spdlog
C++ 通用日志打印,msvc OutputDebug、log file以及控制台console的输出 , 支持日志轮转。

只需要引用头

#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h" // or "../stdout_sinks.h" if no color needed
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/msvc_sink.h"

日志打印配置

通过函数设置msvc OutputDebug、log file以及控制台console的输出

/
// SPDLOGGER SETTING
/
void setLogger(std::string app_name, std::string log_path, std::size_t max_size, std::size_t max_file)
{
    spdlog::drop_all();
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
    console_sink->set_level(spdlog::level::trace);
    //console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");
    console_sink->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%n] [tid: %t] [%l] %v%$");
    
#ifdef WIN32
    auto msvc_sink = std::make_shared<spdlog::sinks::msvc_sink_mt>(false);
    msvc_sink->set_pattern("[%Y-%m-%d %H:%M:%S:%e] [%n] [tid: %t] [%l] %v");
    msvc_sink->set_level(spdlog::level::trace);
#endif 
    std::vector<spdlog::sink_ptr> m_sinks;
    m_sinks.push_back(console_sink);
#ifdef WIN32
    m_sinks.push_back(msvc_sink);
#endif
    
    if (0 < log_path.length()) {
        auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(log_path, max_size, max_file);
        file_sink->set_pattern("[%Y-%m-%d %H:%M:%S:%e] [%n] [tid: %t] [%l] %v");
        file_sink->set_level(spdlog::level::trace);
        m_sinks.push_back(file_sink);
    }
    
    spdlog::logger logger(app_name, begin(m_sinks), end(m_sinks));
    logger.set_level(spdlog::level::trace);
    auto new_logger = std::make_shared<spdlog::logger>(logger);
    spdlog::register_logger(new_logger);
    //auto new_logger = spdlog::basic_logger_mt("new_default_logger", "logs/new-default-log.txt", true);
    
    spdlog::set_default_logger(new_logger);
    spdlog::set_level(spdlog::level::trace);
}

配置

LoggerSettingInit("AppName", ""); // 不输出到文件中
LoggerSettingInit("AppName", "App.log"); // 输出到文件App.log
后面两个参数是日志轮转的单个日志最大大小和最大文件大小

使用spdlog输出日志

spdlog::error("Error: param number error.");
spdlog::error("Catch Exception in {} {}, msg:: {}", __FILE__, __LINE__, e.what());
spdlog::error("Catch Exception in {} {}", __FILE__, __LINE__);
spdlog::error("{} :: exception - {}", __FUNCTION__, e.what());
spdlog::error("{} :: exception", __FUNCTION__);
spdlog::error("{} :: : 0x{:08x}.", __FUNCTION__, hr);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

frankz61

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值