<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用?QSettings 配置?Log4Qt

          共 4428字,需瀏覽 9分鐘

           ·

          2021-06-03 08:42

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


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

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

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


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



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



          1

          使用 QSettings 配置


          為了實現(xiàn)這個功能,可以自定義 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 能正確的進行讀寫。


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


          #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 的日志級別設(shè)置為 INFO
                  s.beginGroup("Log4Qt");
                  s.setValue("Debug""INFO");

                  // 配置日志輸出至文件 logger.log,使用級別 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");
              }
          }


          這樣一來,通過調(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;
          }


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


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

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

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


          根據(jù)配置,在運行程序時,會生成一個名為 logger.log 的日志文件:



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


          往期推薦




          趣味設(shè)計模式
          音視頻開發(fā)
          C++ 進階
          超硬核 Qt
          玩轉(zhuǎn) Linux
          GitHub 開源推薦
          程序人生


          關(guān)注公眾號「高效程序員」??一起優(yōu)秀!

          回復(fù)“1024”,送你一份程序員大禮包。
          瀏覽 28
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  7799天天综合网精品 | 97人妻人人揉人人躁人人 | 亚洲国产日韩一区无码精品久久久久 | 亚洲在线观看 | 你懂的 91 |