1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        使用?QSettings 配置?Log4Qt

        共 4428字,需瀏覽 9分鐘

         ·

        2021-06-03 08:42

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



        當(dāng)然,手動(dòng)添加比較麻煩。有一個(gè)簡(jiǎn)單的辦法,就是下面所說的用程序設(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)行讀寫。


        在 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");
            }
        }


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


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


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

        • 第一次運(yùn)行程序之后,重新打開注冊(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 的日志文件:



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


        往期推薦




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


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

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美三级福利视频 | 少妇性色午夜婬片AAA片软件 | 又黄又爽在线播放 | www.偷拍自拍在线视频 | 狠狠草av | Brinx性欧美猛交XXXX 亚洲成人三级 | 欧美性猛交XXXX乱大交3蜜豆 | 91丨国产丨白丝 | 偷拍自拍在线看 | 亚洲电影久久久 |