/>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()