溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

QSettings中怎么對(duì)Log4Qt進(jìn)行配置

發(fā)布時(shí)間:2021-06-15 11:16:50 來(lái)源:億速云 閱讀:264 作者:Leah 欄目:web開(kāi)發(fā)

QSettings中怎么對(duì)Log4Qt進(jìn)行配置 ,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

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

  • 組織名和應(yīng)用名:通過(guò) QCoreApplication::setOrganizationName() 和  QCoreApplication::setApplicationName() 指定,并且這些名稱(chēng)需要能被 QSettings 找到。

  • 分組:需要有一個(gè)名為 Log4Qt 的分組,在這個(gè)組下面還要有一個(gè)子組 Properties。

  • 配置內(nèi)容:需要符合 Log4Qt 配置語(yǔ)法規(guī)則。

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

QSettings中怎么對(duì)Log4Qt進(jìn)行配置

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

1使用 QSettings 配置

為了實(shí)現(xiàn)這個(gè)功能,可以自定義 QCoreApplication:

#ifndef MY_APPLICATION_H #define MY_APPLICATION_H  #include <QCoreApplication>  class MyApplication : public QCoreApplication {     Q_OBJECT  public:     MyApplication(int &argc, char **argv);     ~MyApplication();      void setupLog4Qt(); };  #endif // MY_APPLICATION_H

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

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

#include "my_application.h" #include <log4qt/logger.h> #include <QSettings>  MyApplication::MyApplication(int &argc, char **argv)     : QCoreApplication(argc, argv) {     // 設(shè)置應(yīng)用程序數(shù)據(jù),以允許 Log4Qt 初始化讀取正確的值     setOrganizationName("MyOrganisation");     setApplicationName("MyApplication");     setOrganizationDomain("https://github.com/Waleon"); }  MyApplication::~MyApplication() { }  void MyApplication::setupLog4Qt() {     QSettings s;      QStringList groups = s.childGroups();     if (!groups.contains("Log4Qt")) {         // 將 Log4Qt 的日志級(jí)別設(shè)置為 INFO         s.beginGroup("Log4Qt");         s.setValue("Debug", "INFO");          // 配置日志輸出至文件 logger.log,使用級(jí)別 INFO         s.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");     } }

這樣一來(lái),通過(guò)調(diào)用 setupLog4Qt() 就能夠設(shè)置 Log4Qt 的配置信息了:

#include <QCoreApplication> #include <log4qt/logger.h> #include "my_application.h"  int main(int argc, char *argv[]) {     MyApplication app(argc, argv);      // 設(shè)置配置信息     app.setupLog4Qt();      // 現(xiàn)在,可以使用 logger 了。     Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();      logger->trace("This is a trace message.");     logger->debug("This is a debug message.");     logger->info("This is a info message.");     logger->warn("This is a warn message.");     logger->error("This is a error message.");     logger->fatal("This is a fatal message.");      return 0; }

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

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

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

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

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

QSettings中怎么對(duì)Log4Qt進(jìn)行配置

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

看完上述內(nèi)容,你們掌握QSettings中怎么對(duì)Log4Qt進(jìn)行配置 的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI