一、目的与需求
在开发qt应用程序中,经常使用打印调试软件。qt自己的qDebug()就满足了需求。但是当需要把一部分log记录到文件的时候qt就没有提供了。这个时候可以使用qDebug()的qInstallMsgHandler来指定打印回掉函数了。在回掉打开文件进行写文件操作。这样简单实现,简单用。但是对于对log写文件要求比较高的比较成熟的log系统。还是自己专门实现一个或者用现成优秀的log库。
推荐的有Log4Qt。但是这里为了打印的高度定制化,还是得自己开发的一个qt的log打印库。实现代码比较简约稳定。实现主要参考了qDebug的实现架构。核心字符串与各种输入对象的合并为一个字符串使用了qt的类“QDebug”。名字叫做“MyLog” ^_^。
用MyLog可以在终端打印出对应log的代码文件名称和行号(qDebug()没有这个功能)。行号可以方便快速定位调试位置。MyLog把info,debug,error在终端以不同的颜色显示。很直观的看到各个级别的log信息。MyLog还可以把平时写的调试打印打印到log文件中。如果对log文件的细节不满意,还可以根据接口实现自己的类。然后使用installer_logger安装你实现的记录器即可用你定义的方式输出log文件了。
MyLog项目在github上,欢迎使用并一起改进。地址如下:
https://github.com/robert1207/MyLog
二、MyLog使用方法
- 下载MyLog
MyLog是在LGPL协议下发布的库,因此可以把此库用于你的商业软件(动态库链接方式使用)。但是在这个库的源码基础上做修改并再次发布,需要同样遵循LGPL开源协议。MyLog的项目地址如下:
git clone https://github.com/robert1207/MyLog
- 在你的Qt工程文件xxx.pro中使用lib方式或src方式添加引用
#using MyLog as the src (使用你自己的目录)
#include($$PWD/my_lib/MyLog/MyLogSrc.pri)
#using MyLog as a lib (使用你自己的目录)
include($$PWD/my_lib/MyLog/MyLogLib.pri)
- 包括头文件
#include "my_log_export.h"
- 安装文件打印记录器
QCoreApplication::setApplicationName("myappname");
QCoreApplication::setApplicationVersion("0.0.1");
QCoreApplication::setOrganizationName("com.company.myappname"); //设置程序名称,保存文件时候用到
QCoreApplication::setOrganizationDomain("com.company.myappname");
MyLogNS::FileLogger *fileLog = new MyLogNS::FileLogger();
int result = fileLog->open_log_file_at_dir("log");
if(result != 0) {
qDebug("error: %s", fileLog->get_error_str(result));
}
qDebug("log file path=%s", fileLog-