成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇學(xué)會(huì)使用 QSettings 配置 Log4Qt

開發(fā) 前端
通過 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且這些名稱需要能被 QSettings 找到。

[[402399]]

本文轉(zhuǎn)載自微信公眾號(hào)「高效程序員」,作者Waleon。轉(zhuǎn)載本文請聯(lián)系高效程序員公眾號(hào)。

在 Log4Qt 的初始化過程中,除了會(huì)使用環(huán)境變量之外,它還會(huì)通過 QSettings 讀取配置。也就是說,在使用 Logger 之前,需要針對(duì) QSettings 做一些基本設(shè)置:

  • 組織名和應(yīng)用名:通過 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且這些名稱需要能被 QSettings 找到。
  • 分組:需要有一個(gè)名為 Log4Qt 的分組,在這個(gè)組下面還要有一個(gè)子組 Properties。
  • 配置內(nèi)容:需要符合 Log4Qt 配置語法規(guī)則。

在 Windows 中,可以在注冊表中添加相應(yīng)的配置。例如,路徑:計(jì)算機(jī)\HKEY_CURRENT_USER\SOFTWARE\MyOrganisation\MyApplication\Log4Qt\Properties:

當(dāng)然,手動(dòng)添加比較麻煩。有一個(gè)簡單的辦法,就是下面所說的用程序設(shè)置 - setupLog4Qt()。

1使用 QSettings 配置

為了實(shí)現(xiàn)這個(gè)功能,可以自定義 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 

在構(gòu)造函數(shù)中,為應(yīng)用程序設(shè)置一些基本信息 - OrganizationName、ApplicationName 以及 OrganizationDomain,以允許 QSettings 能正確的進(jìn)行讀寫。

在 setupLog4Qt() 中,我們創(chuàng)建了一個(gè)組“Log4Qt/Properties”,并且對(duì) rootLogger 進(jìn)行了一些簡單的配置:

  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.     // 設(shè)置應(yīng)用程序數(shù)據(jù),以允許 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 的日志級(jí)別設(shè)置為 INFO 
  20.         s.beginGroup("Log4Qt"); 
  21.         s.setValue("Debug""INFO"); 
  22.  
  23.         // 配置日志輸出至文件 logger.log,使用級(jí)別 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.     } 

這樣一來,通過調(diào)用 setupLog4Qt() 就能夠設(shè)置 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.     // 設(shè)置配置信息 
  9.     app.setupLog4Qt(); 
  10.  
  11.     // 現(xiàn)在,可以使用 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; 

為了更好地說明效果,我們分以下幾步進(jìn)行:

在運(yùn)行程序之前,打開注冊表,這時(shí)并不會(huì)有 Log4Qt 相關(guān)的配置。

第一次運(yùn)行程序之后,重新打開注冊表(或者按 F5 刷新),你會(huì)發(fā)現(xiàn) Log4Qt 所需的配置已經(jīng)生成了,并且會(huì)輸出日志。

刪除或者注釋掉 setupLog4Qt() 部分(注冊表中的配置已經(jīng)有了,不需要再次設(shè)置了),再次運(yùn)行程序,依然會(huì)輸出日志。

根據(jù)配置,在運(yùn)行程序時(shí),會(huì)生成一個(gè)名為 logger.log 的日志文件:

 

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

 

責(zé)任編輯:武曉燕 來源: 高效程序員
相關(guān)推薦

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數(shù)據(jù)ByteBuffer

2022-02-07 11:01:23

ZooKeeper

2021-05-11 08:54:59

建造者模式設(shè)計(jì)

2021-07-02 09:45:29

MySQL InnoDB數(shù)據(jù)

2021-07-06 08:59:18

抽象工廠模式

2023-01-03 08:31:54

Spring讀取器配置

2022-08-26 09:29:01

Kubernetes策略Master

2023-11-28 08:29:31

Rust內(nèi)存布局

2021-07-05 22:11:38

MySQL體系架構(gòu)

2022-08-23 08:00:59

磁盤性能網(wǎng)絡(luò)

2023-11-29 13:59:00

trait定義接口

2022-01-01 20:02:25

Metadata動(dòng)態(tài)元數(shù)據(jù)

2021-10-15 09:55:48

Myloader數(shù)據(jù)教程

2021-07-02 08:51:29

源碼參數(shù)Thread

2021-09-28 08:59:30

復(fù)原IP地址
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产乱性| 精品国产欧美 | 国产精品视频网址 | 色婷婷精品国产一区二区三区 | 黄色免费av| 特级黄一级播放 | www.久久国产精品 | 国产高清在线精品一区二区三区 | 视频1区2区| 91精品国产乱码久久久久久久久 | 日韩成人在线一区 | 亚洲一区不卡在线 | 午夜免费视频 | 国产日韩一区二区三区 | 99国产在线 | 日韩在线一区二区三区 | 久久久久久久久久久久一区二区 | 日韩成人影院 | 国产乱码精品1区2区3区 | 超碰网址| 91视视频在线观看入口直接观看 | 日韩一区二区三区视频 | 中文字幕日韩欧美 | 久热久热| 天天操 夜夜操 | 97影院在线午夜 | 天天看天天干 | 久久精品免费观看 | 特级黄色毛片 | 91婷婷韩国欧美一区二区 | 狠狠爱免费视频 | 久久骚| 色综合成人网 | 国产精久久久久久 | 国产91精品久久久久久久网曝门 | 中文字幕一区在线观看视频 | 国产精品夜夜夜一区二区三区尤 | 日韩视频a | 99re99| 男人的天堂在线视频 | 91在线网站 |