首页| 论坛| 消息
主题:Qt自制简易好看的日志系统
dd759378563发表于 2019-05-01 02:18
/>const static QString logTemplate = u8R"logTemplate(

TaoLogger
...
这里省略一大堆html代码
...
)logTemplate";
}

Qt的log系统

Qt的log分类Qt的打印信息,大家普遍使用的是qDebug,不过Qt除了qDebug,还有qInfo, qWarning, qCritical等等。
涛哥翻了Qt5.12的源码,发现这几个打印最终都是通过fprintf(stderr)或者fprintf(stdout)来实现输出的,
不同的地方就在于Log类型。如果要用好这个分类,那我们平时使用打印的时候,就要注意做区分:
- 调试信息用qDebug- 常规信息用qInfo- 警告用qWarning- 比较严重的问题用qCriticalQt的log格式化Qt提供了一个函数qSetMessagePattern,用来定制输出信息。
例如:
qSetMessagePattern("[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}");

一般只要在main.cpp中添加这一行代码,之后的qDebug、qInfo等函数都会按照这个格式来输出,包含了
时间戳、log类型、文件名、行号 等信息。也可以不改任何代码、改环境变量来做到

Release模式信息缺失这里有个问题,就是文件名和行号在debug模式正常,Release模式会变成空的。
要解决这个问题,那么就需要编译器提供的内置宏__FILE__ 和 __LINE__了
涛哥写了这样几个宏,代替qDebug和qInfo等函数。
#define LOG_DEBUG qDebug()
下一页上一页  (2/3)
回帖(6):
6楼:
5楼:往事纯白:
在写的过程中界面是卡住的
感谢反馈,修改了一下。主要是std::thread join了 ..
4楼:在写的过程中界面是卡住的

全部回帖(6)»
最新回帖
收藏本帖
发新帖