Qt 完美的对接glog

Qt 完美的对接glog

一直使用Qt开发,Qt的Debug 已经很完美了,但是还有部分缺陷。就是日志没有输出到本地文件部分。所以我就想到使用两个日志系统相互结合,spdlog,glog 最终选择了 glog 。 spdlog 我一直烦恼一件事,就是Debug的时候 链接真的太慢了,有懂的大佬,可以教教我怎么做。(红包伺候)

Qt重写导向日志

  1. 在main文件内 注册函数
    qInstallMessageHandler(customMessageHandler);
  1. 重写函数
void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &str) {
    switch (type) {
        case QtDebugMsg:
            DLOG(INFO) << str.toLocal8Bit().data();
            break;
        case QtWarningMsg:
            LOG(WARNING) << str.toLocal8Bit().data();
            break;
        case QtCriticalMsg:
            LOG(ERROR) << str.toLocal8Bit().data();
            break;
        case QtFatalMsg:
            LOG(FATAL) << str.toLocal8Bit().data();
            break;
        case QtInfoMsg:
            LOG(INFO) << str.toLocal8Bit().data();
            break;
    }
}

Glog 部分

  1. 注册函数
 google::InitGoogleLogging("test", &CustomPrefix);//使用glog之前必须先初始化库,仅需执行一次,括号内为程序名
  1. 重写函数
void CustomPrefix(std::ostream &s, const google::LogMessageInfo &l, void *) {
    s << l.severity[0]
      << std::setw(4) << 1900 + l.time.year()
      << std::setw(2) << 1 + l.time.month()
      << std::setw(2) << l.time.day()
      << ' '
      << std::setw(2) << l.time.hour() << ':'
      << std::setw(2) << l.time.min() << ':'
      << std::setw(2) << l.time.sec() << "."
      << std::setw(6) << l.time.usec()
      << ' '
      << std::setfill(' ') << std::setw(5)
      << l.thread_id << std::setfill('0')
      << ' ';
//      << l.filename << ':' << l.line_number << "]";// 这里是文件以及行号 因为我喜欢自己的方式,所以我重写在别的地方封装了。
}

我自己封装的宏

  1. 全局
// 当前文件名以及行号
#define FILENAME_ QString(QFileInfo(__FILE__).fileName() + ":" + QString::number(__LINE__)).toStdString().data()

#define __Warning qWarning()<<FILENAME_<<__func__
#define __Debug qDebug()<<FILENAME_<<__func__
#define __Info qInfo()<<FILENAME_<<__func__
#define __Error  qCritical()<<FILENAME_<<__func__

#define __Warning_N qWarning().noquote()<<FILENAME_<<__func__
#define __Debug_N qDebug().noquote()<<FILENAME_<<__func__
#define __Info_N qInfo().noquote()<<FILENAME_<<__func__
#define __Error_N  qCritical().noquote() <<FILENAME_<<__func__

最终效果

  1. 控制台

在这里插入图片描述

2.文件

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值