c++使用spdlog总结

本文介绍了如何在C++项目中使用spdlog库进行日志管理,包括msvc_sink_mt的替代方案stdout_color_sink_mt和rotating_file_sink_mt,以及自定义的BaseSinkViewModel类,实现在QtQML中的日志显示。
摘要由CSDN通过智能技术生成
    int size = 10 * 1024 * 1024; // 10M
    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
    //auto console_sink = std::make_shared<spdlog::sinks::msvc_sink_mt>();
     console_sink->set_level(spdlog::level::debug);
    auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/log.txt", size, 360, true);
    file_sink->set_level(spdlog::level::debug);
    auto baseSinkViewModel = std::make_shared<BaseSinkViewModel>();
     spdlog::sinks_init_list sinks { console_sink, file_sink, baseSinkViewModel };
    auto logger = std::make_shared<spdlog::logger>("global logger", sinks);
    logger->set_level(spdlog::level::debug);   //设置等级
    logger->flush_on(spdlog::level::debug);   //刷新
    spdlog::flush_every(std::chrono::seconds(3));    //刷新时间
    spdlog::set_default_logger(logger);      

上述代码说明
msvc_sink_mt 用于vs终端生成debug信息,但是在安卓上不能使用,替代品为stdout_color_sink_mt
rotating_file_sink_mt写入文本
BaseSinkViewModel 是我自己写的类,继承了base_sink 用于把打印的日志通过信号槽的方式传到QML,下面是代码

class BaseSinkViewModel : public QObject,public spdlog::sinks::base_sink<std::mutex> {
    Q_OBJECT
        Q_PROPERTY(QVariantList logInfoList READ logInfoList NOTIFY logInfoListChanged)
public:
    BaseSinkViewModel(QObject* parent = nullptr);
    ~BaseSinkViewModel() override;
         QVariantList logInfoList() const;
signals:
     void logInfoListChanged();
     protected:

    void sink_it_(const spdlog::details::log_msg& msg) override;
    void flush_() override;
    private:
    QVariantList m_logInfoList;
    void processLogMessage(const spdlog::details::log_msg& msg);
};

BaseSinkViewModel::BaseSinkViewModel(QObject* parent)
    : QObject(parent)
{
}
BaseSinkViewModel::~BaseSinkViewModel()
{
}
QVariantList BaseSinkViewModel::logInfoList() const
{
    return m_logInfoList;
}
void BaseSinkViewModel::sink_it_(const spdlog::details::log_msg& msg)
{
    processLogMessage(msg);
}
void BaseSinkViewModel::flush_()
{
    
}
void BaseSinkViewModel::processLogMessage(const spdlog::details::log_msg& msg)
{
   m_logInfoList.append(QString(QLatin1String(msg.payload.data())));

    emit logInfoListChanged();
}

注册方式 qmlRegisterSingletonInstance(“BaseSinkViewModel”, 1, 0, “BaseSinkViewModel”, baseSinkViewModel.get());

spdlog使用介绍
只需要在main函数中添加最上面的代码就可以全局使用了,BaseSinkViewModel用不到的话删除就可以了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值