最近在写一个 QT 的程序,需要打印日志。搜索了一下,选定了 Log4Qt。不过,原项目已经长期不更新了,而 DevBean 维护了一个 Qt5 的版本。所以,我执行了 git submodule add https://github.com/devbean/log4qt.git
。在我撰写本文时(2015年2月),另一个团队也在孜孜不倦地 维护着 Log4qt。可惜,在2023年,他们的网站已经无法访问了。
官方提供了一个比较详细的使用介绍,但也隐藏了几个小坑,整理如下:
Step 1
将这句话加入 .pro 文件即可
include(<unpackdir>/src/log4qt/log4qt.pri)
Step 2
在预编译头文件里加入
Step 3
初始化 Log4Qt,我是在 QApplication::exec()
之前执行的这段代码
为了能灵活地处理 Layout,我小幅修改了原有的代码。
关于 Layout 的详细内容,可以参考 Log4j 的一篇文档,使用方法与 C 的格式化字符串是一样的。
Step 4
然后,就可以直接输出 log 了,例如官方示例
Log4Qt::Logger::logger(QLatin1String("My Logger"))->info("Hello World!");
为了简化代码,我在预编译头文件里又加入了这段内容
而在定义类的头文件里,只要初始化一下
就可以直接在类的成员函数里用 ERROR()
这样的宏了。
Step 5
Log4Qt 的功能非常强大。例如,四个 Level 用于输出不同的信息,可以在启动时动态确定输出哪些信息。同样,也可以使用条件编译,在 Release 里将 INFO
编译成 (void)0
来减少性能损失。不过,Log4Qt 的性能没有测试,希望了解的朋友贴出自己的经验 :-)
Last
从我学 Qt 的第一天起就没少看 DevBeans 的博客,也在这里推荐一下他的书籍
《Qt 5编程入门》