使用 QSettings 配置 Log4Qt

共 4428字,需浏览 9分钟

 ·

2021-06-03 08:42

在 Log4Qt 的初始化过程中,除了会使用环境变量之外,它还会通过 QSettings 读取配置。也就是说,在使用 Logger 之前,需要针对 QSettings 做一些基本设置:


  • 组织名和应用名:通过 QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且这些名称需要能被 QSettings 找到。

  • 分组:需要有一个名为 Log4Qt 的分组,在这个组下面还要有一个子组 Properties

  • 配置内容:需要符合 Log4Qt 配置语法规则。


在 Windows 中,可以在注册表中添加相应的配置。例如,路径:计算机\HKEY_CURRENT_USER\SOFTWARE\MyOrganisation\MyApplication\Log4Qt\Properties



当然,手动添加比较麻烦。有一个简单的办法,就是下面所说的用程序设置 - setupLog4Qt()。



1

使用 QSettings 配置


为了实现这个功能,可以自定义 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


在构造函数中,为应用程序设置一些基本信息 - OrganizationName、ApplicationName 以及 OrganizationDomain,以允许 QSettings 能正确的进行读写。


在 setupLog4Qt() 中,我们创建了一个组“Log4Qt/Properties”,并且对 rootLogger 进行了一些简单的配置:


#include "my_application.h"
#include <log4qt/logger.h>
#include <QSettings>

MyApplication::MyApplication(int &argc, char **argv)
    : QCoreApplication(argc, argv)
{
    // 设置应用程序数据,以允许 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 的日志级别设置为 INFO
        s.beginGroup("Log4Qt");
        s.setValue("Debug""INFO");

        // 配置日志输出至文件 logger.log,使用级别 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");
    }
}


这样一来,通过调用 setupLog4Qt() 就能够设置 Log4Qt 的配置信息了:


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

int main(int argc, char *argv[])
{
    MyApplication app(argc, argv);

    // 设置配置信息
    app.setupLog4Qt();

    // 现在,可以使用 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;
}


为了更好地说明效果,我们分以下几步进行:


  • 在运行程序之前,打开注册表,这时并不会有 Log4Qt 相关的配置。

  • 第一次运行程序之后,重新打开注册表(或者按 F5 刷新),你会发现 Log4Qt 所需的配置已经生成了,并且会输出日志。

  • 删除或者注释掉 setupLog4Qt() 部分(注册表中的配置已经有了,不需要再次设置了),再次运行程序,依然会输出日志。


根据配置,在运行程序时,会生成一个名为 logger.log 的日志文件:



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


往期推荐




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


关注公众号「高效程序员」👇一起优秀!

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

手机扫一扫分享

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

手机扫一扫分享

分享
举报