Qt 完美的对接glog
Qt 完美的对接glog
一直使用Qt开发,Qt的Debug 已经很完美了,但是还有部分缺陷。就是日志没有输出到本地文件部分。所以我就想到使用两个日志系统相互结合,spdlog,glog 最终选择了 glog 。 spdlog 我一直烦恼一件事,就是Debug的时候 链接真的太慢了,有懂的大佬,可以教教我怎么做。(红包伺候)
Qt重写导向日志
- 在main文件内 注册函数
qInstallMessageHandler(customMessageHandler);
- 重写函数
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 部分
- 注册函数
google::InitGoogleLogging("test", &CustomPrefix);//使用glog之前必须先初始化库,仅需执行一次,括号内为程序名
- 重写函数
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 << "]";// 这里是文件以及行号 因为我喜欢自己的方式,所以我重写在别的地方封装了。
}
我自己封装的宏
- 全局
// 当前文件名以及行号
#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__
最终效果
- 控制台
2.文件