使用环境变量配置 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_DEBUGDebug
LOG4QT_DEFAULTINITOVERRIDEDefaultInitOverride
LOG4QT_CONFIGURATIONConfiguration
LOG4QT_CONFIGURATORCLASSConfiguratorClass


到这里,想必大家对这些环境变量有了一定的了解。至于细节问题,在后面会详细分析。


往期推荐




☞ 趣味设计模式
☞ C++ 音视频开发
☞ Qt 硬核指南
☞ 玩转 Linux
☞ GitHub 开源推荐
☞ 程序人生


关注公众号👇一起优(niu)秀(bi)!

回复「1024」,送你一份程序员大礼包。
浏览 76
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报