使用环境变量配置 Log4Qt
共 3774字,需浏览 8分钟
·
2021-05-15 19:46
Log4Qt 定义了一系列环境变量,用于控制初始化过程。这些变量包括:
变量 | 描述 |
---|---|
LOG4QT_DEBUG | 控制 LogManager::logLogger() 的日志级别 |
LOG4QT_DEFAULTINITOVERRIDE | 控制 LogManager 在启动时执行的初始化过程 |
LOG4QT_CONFIGURATION | 指定用于初始化的配置文件 |
LOG4QT_CONFIGURATORCLASS | 指定用于初始化的配置类(在 Log4Qt 中,尚未用到) |
下面,来看看这些环境变量的具体用途。
1
使用环境变量
现在,编写一个简单的程序:
#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;
}
编译程序,会生成一个可执行程序(例如:EnvVarInit.exe)。为了介绍环境变量,用命令行来运行它:
> .\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
你会发现,Log4Qt 内部的日志被打印出来了。其中,日志级别最高的是 INFO
。
如果不想输出这些内部日志,可以为其指定一个更高的级别(> INFO
):
>set LOG4QT_DEBUG=WARN
>.\EnvVarInit.exe
>
虽然上面有日志输出,但是它们都是 Log4Qt 的内部日志,如何输出我们自己的日志信息呢?
3
LOG4QT_CONFIGURATION
为了实现这一点,编写一个名为 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
注意: 配置内容在后面会详细讲解,这里先不做过多介绍。
然后,将该文件指向环境变量 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
紧接着上面,现在设置环境变量 LOG4QT_DEFAULTINITOVERRIDE
的值,再次运行程序:
>set LOG4QT_DEFAULTINITOVERRIDE=true
>.\EnvVarInit.exe
>
What,又没有任何输出了!因为一旦将该环境变量设置为一个非 false 的值,那么就会跳过这些初始化文件。
要想重新起作用,需要将其设置为 false:
>set LOG4QT_DEFAULTINITOVERRIDE=false
或者直接删除:
>set LOG4QT_DEFAULTINITOVERRIDE=
5
实现细节
环境变量在创建 InitialisationHelper
的静态初始化期间被读取,这个过程对用户来说是透明的。
这些值可以通过下面的方式来访问:
inline QHash<QString, QString> InitialisationHelper::environmentSettings()
{
return instance()->mEnvironmentSettings;
}
这个接口返回的是一个 QHash
,可以根据 key 来获取相应的值。对应的 key 为:
环境变量 | key |
---|---|
LOG4QT_DEBUG | Debug |
LOG4QT_DEFAULTINITOVERRIDE | DefaultInitOverride |
LOG4QT_CONFIGURATION | Configuration |
LOG4QT_CONFIGURATORCLASS | ConfiguratorClass |
到这里,想必大家对这些环境变量有了一定的了解。至于细节问题,在后面会详细分析。
关注公众号👇,一起优(niu)秀(bi)!