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>

        使用環(huán)境變量配置?Log4Qt

        共 3774字,需瀏覽 8分鐘

         ·

        2021-05-15 19:46

        Log4Qt 定義了一系列環(huán)境變量,用于控制初始化過程。這些變量包括:


        變量描述
        LOG4QT_DEBUG控制 LogManager::logLogger() 的日志級別
        LOG4QT_DEFAULTINITOVERRIDE控制 LogManager 在啟動時執(zhí)行的初始化過程
        LOG4QT_CONFIGURATION指定用于初始化的配置文件
        LOG4QT_CONFIGURATORCLASS指定用于初始化的配置類(在 Log4Qt 中,尚未用到)


        下面,來看看這些環(huán)境變量的具體用途。



        1

        使用環(huán)境變量


        現(xiàn)在,編寫一個簡單的程序:


        #include <QCoreApplication>
        #include <log4qt/logger.h>

        int main(int argc, char *argv[])
        {
            QCoreApplication a(argc, argv);

            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;
        }


        編譯程序,會生成一個可執(zhí)行程序(例如:EnvVarInit.exe)。為了介紹環(huán)境變量,用命令行來運行它:

        > .\EnvVarInit.exe

        >

        很遺憾,這時并沒有任何消息輸出。



        2

        LOG4QT_DEBUG


        LOG4QT_DEBUG 的值指定為 DEBUG,再次運行程序:

        >set LOG4QT_DEBUG=DEBUG

        >.\EnvVarInit.exe

        0 [0x000001b37ae9e030] INFO  Log4Qt::LogManager - Initialising Log4Qt 1.6.0

        125 [0x000001b37ae9e030] DEBUG Log4Qt::LogManager - Program startup time is 2021-05-12 22:26:05.181 (UTC+08:00)

        125 [0x000001b37ae9e030] DEBUG Log4Qt::LogManager - Internal logging uses the level DEBUG

        125 [0x000001b37ae9e030] DEBUG Log4Qt::LogManager - Default initialisation leaves package unconfigured

        你會發(fā)現(xiàn),Log4Qt 內(nèi)部的日志被打印出來了。其中,日志級別最高的是 INFO。


        如果不想輸出這些內(nèi)部日志,可以為其指定一個更高的級別(> INFO):

        >set LOG4QT_DEBUG=WARN

        >.\EnvVarInit.exe

        >

        雖然上面有日志輸出,但是它們都是 Log4Qt 的內(nèi)部日志,如何輸出我們自己的日志信息呢?



        3

        LOG4QT_CONFIGURATION


        為了實現(xiàn)這一點,編寫一個名為 log4qt.conf(名稱任意)的配置文件,然后為 rootLogger 進行一些基本配置(日志級別為 INFO,輸出地為控制臺):


        log4j.rootLogger=INFO, console

        log4j.appender.console=org.apache.log4j.ConsoleAppender
        log4j.appender.console.threshold=INFO
        log4j.appender.console.immediateFlush=true
        log4j.appender.console.target=STDOUT_TARGET
        log4j.appender.console.layout=org.apache.log4j.PatternLayout
        log4j.appender.console.layout.conversionPattern=%r [%t] %p %c %x - %m%n


        注意: 配置內(nèi)容在后面會詳細講解,這里先不做過多介紹。


        然后,將該文件指向環(huán)境變量 LOG4QT_CONFIGURATION,并再次運行程序:

        >set LOG4QT_CONFIGURATION=log4qt.conf

        >.\EnvVarInit.exe

        111 [0x000002588505f8a0] INFO root  - This is a info message.

        111 [0x000002588505f8a0] WARN root  - This is a warn message.

        111 [0x000002588505f8a0] ERROR root  - This is a error message.

        111 [0x000002588505f8a0] FATAL root  - This is a fatal message.

        完美,我們的日志被打印出來了。



        4

        LOG4QT_DEFAULTINITOVERRIDE


        緊接著上面,現(xiàn)在設置環(huán)境變量 LOG4QT_DEFAULTINITOVERRIDE 的值,再次運行程序:

        >set LOG4QT_DEFAULTINITOVERRIDE=true

        >.\EnvVarInit.exe

        >

        What,又沒有任何輸出了!因為一旦將該環(huán)境變量設置為一個非 false 的值,那么就會跳過這些初始化文件。


        要想重新起作用,需要將其設置為 false:

        >set LOG4QT_DEFAULTINITOVERRIDE=false

        或者直接刪除:

        >set LOG4QT_DEFAULTINITOVERRIDE=



        5

        實現(xiàn)細節(jié)


        環(huán)境變量在創(chuàng)建 InitialisationHelper 的靜態(tài)初始化期間被讀取,這個過程對用戶來說是透明的。


        這些值可以通過下面的方式來訪問:


        inline QHash<QString, QString> InitialisationHelper::environmentSettings()
        {
            return instance()->mEnvironmentSettings;
        }


        這個接口返回的是一個 QHash,可以根據(jù) key 來獲取相應的值。對應的 key 為:


        環(huán)境變量key
        LOG4QT_DEBUGDebug
        LOG4QT_DEFAULTINITOVERRIDEDefaultInitOverride
        LOG4QT_CONFIGURATIONConfiguration
        LOG4QT_CONFIGURATORCLASSConfiguratorClass


        到這里,想必大家對這些環(huán)境變量有了一定的了解。至于細節(jié)問題,在后面會詳細分析。


        往期推薦




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


        關注公眾號??一起優(yōu)(niu)秀(bi)!

        回復「1024」,送你一份程序員大禮包。
        瀏覽 103
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        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>
            精产国品一区二区区别 | 日韩一区二区三区电影 | 操比123 | 偷拍另类亚洲 | 欧美日韩男女交媾视频-特黄篇 | 欧美字幕一区 | 成年人啪啪视频 | 人人曰人人操 | 久久奸淫视频 | 超碰成人免费 |