QT 项目第一弹 - 自定义日志输出
作者:springIce
- 2024-02-01 北京
本文字数:1558 字
阅读完需:约 5 分钟
自定义日志输出
自定义日志输出基本功能
第一步 注册日志输出函数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
/**
* @Brief: 注册日志事件
* @Author: springIce
* @Date: 2024-01-24
**/
qInstallMessageHandler(outputMessage);
/**
* @Brief: 主界面展示
* @Author: springIce
* @Date: 2024-01-24
**/
MainWindow w;
w.show();
return a.exec();
}
复制代码
第二步 实现自定义函数
#include <QTextStream>
#include <QDateTime>
#include <QMutex>
#include <QFile>
#include <QThread>
/***************************************************************
* @Brief:
* @Author: springIce
* @Date: 2024-01-24
****************************************************************/
QMutex myMutex;
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
// 加锁
myMutex.lock();
//信息分类
QString formMsg = "";
switch(type) {
case QtDebugMsg:
formMsg = QString("Debug: ");
break;
case QtInfoMsg:
formMsg = QString("Info: ");
break;
case QtWarningMsg:
formMsg = QString("Warning: ");
break;
case QtCriticalMsg:
formMsg = QString("Critical: ");
break;
case QtFatalMsg:
formMsg = QString("Fatal: ");
break;
default:
break;
}
//文件名、函数名、行数
formMsg += QString("%1 [%2: %3]").arg(context.file).arg(context.file).arg(context.line);
// 时间和内容
QString strDateTime = QDateTime::currentDateTime().toString("hh:mm:ss");
QString strMessage = QString("%1 %2:%3").arg(strDateTime).arg(formMsg).arg(msg);
#ifdef QT_DEBUG
QTextStream qout(stdout);
qout << strMessage << "\r\n";
#else
QThread::create([=](){
//写入文件
QFile file(logFileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Append)) {
file.close();
return;
}
QTextStream stream(&file);
stream << strMessage << "\r\n";;
file.flush();
file.close();
});
#endif
// 解锁
myMutex.unlock();
}
复制代码
以上就是简单的日志输出定义,可以去其它类中使用正常 qDebug 等即可
void MainWindow::on_pushButton_clicked()
{
qDebug() << "Hello Logger";
}
复制代码
自定义日志输出颜色
自定义输出函数 outputMessage 改为如下,其他不变
//文件名、函数名、行数
QString formMsg = QString("%1 [%2: %3]").arg(context.file).arg(context.file).arg(context.line);
//信息分类
switch(type) {
case QtDebugMsg:
formMsg = QString("\033[32m Debug: ");
break;
case QtInfoMsg:
formMsg = QString("\033[34m Info: ");
break;
case QtWarningMsg:
formMsg = QString("\033[33m Warning: ");
break;
case QtCriticalMsg:
formMsg = QString("Critical: ");
break;
case QtFatalMsg:
formMsg = QString("\033[31m Fatal: ");
break;
default:
break;
}
复制代码
打印展示
void MainWindow::on_pushButton_clicked()
{
qDebug() << "Greenn";
qWarning() << "Yelloww";
qInfo() << "Bluee";
qFatal("Redd");
}
复制代码
展示效果图如下
划线
评论
复制
发布于: 刚刚阅读数: 7
版权声明: 本文为 InfoQ 作者【springIce】的原创文章。
原文链接:【http://xie.infoq.cn/article/48266949b9b66bf24d45aa03e】。文章转载请联系作者。
springIce
关注
还未添加个人签名 2019-09-23 加入
还未添加个人简介
评论