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

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)在設(shè)置環(huán)境變量 LOG4QT_DEFAULTINITOVERRIDE 的值,再次運行程序:
>set LOG4QT_DEFAULTINITOVERRIDE=true
>.\EnvVarInit.exe
>
What,又沒有任何輸出了!因為一旦將該環(huán)境變量設(shè)置為一個非 false 的值,那么就會跳過這些初始化文件。
要想重新起作用,需要將其設(shè)置為 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 來獲取相應(yīng)的值。對應(yīng)的 key 為:
| 環(huán)境變量 | key |
|---|---|
| LOG4QT_DEBUG | Debug |
| LOG4QT_DEFAULTINITOVERRIDE | DefaultInitOverride |
| LOG4QT_CONFIGURATION | Configuration |
| LOG4QT_CONFIGURATORCLASS | ConfiguratorClass |
到這里,想必大家對這些環(huán)境變量有了一定的了解。至于細節(jié)問題,在后面會詳細分析。



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