一篇学会使用 QSettings 配置 Log4Qt

开发 前端
通过 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且这些名称需要能被 QSettings 找到。

[[402399]]

本文转载自微信公众号「高效程序员」,作者Waleon。转载本文请联系高效程序员公众号。

在 Log4Qt 的初始化过程中,除了会使用环境变量之外,它还会通过 QSettings 读取配置。也就是说,在使用 Logger 之前,需要针对 QSettings 做一些基本设置:

  • 组织名和应用名:通过 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且这些名称需要能被 QSettings 找到。
  • 分组:需要有一个名为 Log4Qt 的分组,在这个组下面还要有一个子组 Properties。
  • 配置内容:需要符合 Log4Qt 配置语法规则。

在 Windows 中,可以在注册表中添加相应的配置。例如,路径:计算机\HKEY_CURRENT_USER\SOFTWARE\MyOrganisation\MyApplication\Log4Qt\Properties:

当然,手动添加比较麻烦。有一个简单的办法,就是下面所说的用程序设置 - setupLog4Qt()。

1使用 QSettings 配置

为了实现这个功能,可以自定义 QCoreApplication:

  1. #ifndef MY_APPLICATION_H 
  2. #define MY_APPLICATION_H 
  3.  
  4. #include <QCoreApplication> 
  5.  
  6. class MyApplication : public QCoreApplication 
  7.     Q_OBJECT 
  8.  
  9. public
  10.     MyApplication(int &argc, char **argv); 
  11.     ~MyApplication(); 
  12.  
  13.     void setupLog4Qt(); 
  14. }; 
  15.  
  16. #endif // MY_APPLICATION_H 

在构造函数中,为应用程序设置一些基本信息 - OrganizationName、ApplicationName 以及 OrganizationDomain,以允许 QSettings 能正确的进行读写。

在 setupLog4Qt() 中,我们创建了一个组“Log4Qt/Properties”,并且对 rootLogger 进行了一些简单的配置:

  1. #include "my_application.h" 
  2. #include <log4qt/logger.h> 
  3. #include <QSettings> 
  4.  
  5. MyApplication::MyApplication(int &argc, char **argv) 
  6.     : QCoreApplication(argc, argv) 
  7.     // 设置应用程序数据,以允许 Log4Qt 初始化读取正确的值 
  8.     setOrganizationName("MyOrganisation"); 
  9.     setApplicationName("MyApplication"); 
  10.     setOrganizationDomain("https://github.com/Waleon"); 
  11.  
  12. MyApplication::~MyApplication() 
  13.  
  14. void MyApplication::setupLog4Qt() 
  15.     QSettings s; 
  16.  
  17.     QStringList groups = s.childGroups(); 
  18.     if (!groups.contains("Log4Qt")) { 
  19.         // 将 Log4Qt 的日志级别设置为 INFO 
  20.         s.beginGroup("Log4Qt"); 
  21.         s.setValue("Debug""INFO"); 
  22.  
  23.         // 配置日志输出至文件 logger.log,使用级别 INFO 
  24.         s.beginGroup("Properties"); 
  25.         s.setValue("log4j.rootLogger""INFO, logFile"); 
  26.         s.setValue("log4j.appender.logFile""org.apache.log4j.FileAppender"); 
  27.         s.setValue("log4j.appender.logFile.file""logger.log"); 
  28.         s.setValue("log4j.appender.logFile.layout""org.apache.log4j.TTCCLayout"); 
  29.         s.setValue("log4j.appender.logFile.layout.dateFormat""ISO8601"); 
  30.     } 

这样一来,通过调用 setupLog4Qt() 就能够设置 Log4Qt 的配置信息了:

  1. #include <QCoreApplication> 
  2. #include <log4qt/logger.h> 
  3. #include "my_application.h" 
  4.  
  5. int main(int argc, char *argv[]) 
  6.     MyApplication app(argc, argv); 
  7.  
  8.     // 设置配置信息 
  9.     app.setupLog4Qt(); 
  10.  
  11.     // 现在,可以使用 logger 了。 
  12.     Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger(); 
  13.  
  14.     logger->trace("This is a trace message."); 
  15.     logger->debug("This is a debug message."); 
  16.     logger->info("This is a info message."); 
  17.     logger->warn("This is a warn message."); 
  18.     logger->error("This is a error message."); 
  19.     logger->fatal("This is a fatal message."); 
  20.  
  21.     return 0; 

为了更好地说明效果,我们分以下几步进行:

在运行程序之前,打开注册表,这时并不会有 Log4Qt 相关的配置。

第一次运行程序之后,重新打开注册表(或者按 F5 刷新),你会发现 Log4Qt 所需的配置已经生成了,并且会输出日志。

删除或者注释掉 setupLog4Qt() 部分(注册表中的配置已经有了,不需要再次设置了),再次运行程序,依然会输出日志。

根据配置,在运行程序时,会生成一个名为 logger.log 的日志文件:

 

可以看到,它里面包含了所有的日志记录。

 

责任编辑:武晓燕 来源: 高效程序员
相关推荐

2021-12-28 07:20:43

Hippo WebAssembly云原生

2021-07-26 05:07:23

Swift万花尺代码

2022-01-02 08:43:46

Python

2022-10-20 07:39:26

2022-02-21 08:48:00

Pulsar部署配置

2022-01-12 07:36:01

Java数据ByteBuffer

2022-02-07 11:01:23

ZooKeeper

2023-11-29 13:59:00

trait定义接口

2022-01-01 20:02:25

Metadata动态元数据

2021-07-06 08:59:18

抽象工厂模式

2021-05-11 08:54:59

建造者模式设计

2021-07-02 09:45:29

MySQL InnoDB数据

2022-08-26 09:29:01

Kubernetes策略Master

2023-01-03 08:31:54

Spring读取器配置

2021-07-05 22:11:38

MySQL体系架构

2023-11-28 08:29:31

Rust内存布局

2022-08-23 08:00:59

磁盘性能网络

2021-10-15 09:55:48

Myloader数据教程

2021-10-27 09:59:35

存储

2021-07-02 08:51:29

源码参数Thread
点赞
收藏

51CTO技术栈公众号