本文转载自微信公众号《高效程序员》,作者Waleon。转载本文请联系高效程序员公众号。Log4Qt在初始化过程中,除了使用环境变量外,还通过QSettings读取配置。也就是说,在使用Logger之前,需要对QSettings做一些基础设置:组织名称和应用名称:由QCoreApplication::setOrganizationName()和QCoreApplication::setApplicationName()指定,这些名称需要通过QSettings找到.分组:需要有一个名为Log4Qt的分组,这个分组下还有一个子分组Properties。配置内容:需要遵守Log4Qt配置语法规则。在Windows中,可以在注册表中添加相应的配置。比如路径:Computer\HKEY_CURRENT_USER\SOFTWARE\MyOrganisation\MyApplication\Log4Qt\Properties:当然手动添加比较麻烦。有一个简单的方法,就是使用下面提到的程序设置——setupLog4Qt()。1使用QSettings配置为了实现这个功能,可以自定义QCoreApplication:#ifndefMY_APPLICATION_H#defineMY_APPLICATION_H#includeclassMyApplication:publicQCoreApplication{Q_OBJECTpublic:MyApplication(int&argc,char**argv);~MyApplication();voidsetupLog4Qt();};#endif//MY_APPLICATION_H在构造函数中,设置应用程序的一些基本信息——OrganizationName、ApplicationName和OrganizationDomain,让QSettings能够正确读写。在setupLog4Qt()中,我们创建了一个组“Log4Qt/Properties”并对rootLogger做了一些简单的配置:#include"my_application.h"#include#includeMyApplication::MyApplication(int&argc,char**argv):QCoreApplication(argc,argv){//设置应用程序数据让Log4Qt初始化读取正确的值com/Waleon");}MyApplication::~MyApplication(){}voidMyApplication::setupLog4Qt(){QSettingss;QStringListgroups=s.childGroups();if(!groups.contains("Log4Qt")){//设置Log4Qt的日志级别到INFOs.beginGroup("Log4Qt");s.setValue("Debug","INFO");//配置日志输出到文件logger.log,使用levelINFOs.beginGroup("Properties");s.setValue("log4j.rootLogger","INFO,logFile");s.setValue("log4j.appender.logFile","org.apache.log4j.FileAppender");s.setValue("log4j.appender.logFile.file","logger.log");s.setValue("log4j.appender.logFile.layout","org.apache.log4j.TTCCLayout");s.setValue("log4j.appender.logFile.layout.dateFormat","ISO8601");}}这样调用setupLog4Qt()就可以设置Log4Qt的配置信息了:#include#include#include"my_application.h"intmain(intargc,char*argv[]){MyApplicationapp(argc,argv);//设置配置信息app.setupLog4Qt();//此时可以使用loggerLog4Qt::Logger*logger=Log4Qt::Logger::rootLogger();logger->trace("Thisisatracemessage.");logger->debug("Thisisadebugmessage.");logger->info("Thisisainfomessage.");logger->warn("Thisisawarnmessage.");logger->error("Thisisaerrormessage.");logger->fatal("Thisisafatalmessage.");return0;}为了更好的说明效果,我们分以下几个步骤运行程序之前,打开注册表,此时不会出现Log4Qt这次的相关配置。第一次运行程序后,重新打开注册表(或者按F5刷新),你会发现Log4Qt需要的配置已经生成,并且会输出日志。删除或注释掉setupLog4Qt()部分(注册表中的配置已经存在,无需重新设置),再次运行程序,仍然会输出日志。根据配置,运行程序时,会生成一个名为logger.log的日志文件:如你所见,它包含了所有的日志记录。