Log4Qt 日志级别

高效程序员

共 4801字,需浏览 10分钟

 ·

2021-08-20 12:38

星标/置顶 公众号👇硬核文章第一时间送达


1

日志级别


Log4Qt 定义了一系列日志级别,每个级别都对应一种特定类型的消息事件。通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。


日志级别被定义在 Level 类中,由 Level::Value 来表示(按照严重性递增排序):


级别描述
NULL_INT0用于未指定的级别
ALL_INT32所有级别
TRACE_INT64比 DEBUG 更细粒度的信息事件
DEBUG_INT96细粒度的信息事件(该事件对调试应用程序非常有用)
INFO_INT128信息性消息(该消息突出显示了应用程序在粗粒度级别上的进展)
WARN_INT150具有潜在危害的情况
ERROR_INT182错误事件(该事件可能仍然允许应用程序继续运行)
FATAL_INT214非常严重的错误事件(该事件可能导致应用程序中止)
OFF_INT255最高等级,用于关闭日志记录


注意:与 Log4j 不同的是,Log4Qt 除了多出一个新值 NULL_INT 之外,它也不支持自定义级别。


虽然级别众多,但 Log4Qt 只建议使用四个,它们分别是:DEBUGINFOWARNERROR



2

日志级别的工作方式


关于日志级别,Log4Qt 有一个核心规则:




ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL




如果 p >= q,则在具有级别 q 的 Logger 中,会启用对级别 p 的日志请求。


要设置日志的级别,需要使用 Logger::setLevel(Level level)。一旦设置,除 level 本身之外,比 level 级别高的日志也会被打印。


假如,要打印 level >= WARN 的消息,可以使用下述方式:


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

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

    // 一个简单的基础配置
    Log4Qt::BasicConfigurator::configure();

    // 获取 rootLogger
    Log4Qt::Logger* logger = Log4Qt::Logger::rootLogger();

    // 设置日志级别为 WARN
    logger->setLevel(Log4Qt::Level::WARN_INT);

    // 打印消息
    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 a.exec();
}


运行程序,输出如下:

269 [0x000001e084fdd7e0] WARN root  - This is a warn message.

275 [0x000001e084fdd7e0] ERROR root  - This is a error message.

278 [0x000001e084fdd7e0] FATAL root  - This is a fatal message.

除了 WARN 之外,级别比它高的信息也被输出了,而级别比它低的并没有被输出。



3

使用配置文件设置级别


Log4Qt 提供了基于配置文件的设置,当想要改变日志的相关配置时,无需再去更改源代码。


注意:出于兼容性考虑,Log4j 中的的条目依然会被识别,所以 Log4Qt 中的配置完全可以参考 Log4j 来写。 


Log4j 根配置语法:


log4j.rootLogger = [ level ] , appenderName1, appenderName2, …


  • level:日志的级别(例如:DEBUGINFO)。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。

  • appenderName:指定日志信息的输出地(例如:控制台、文件、数据库),可以同时指定多个。


编写一个配置文件 - log4qt.properties,执行与上例中使用 logger->setLevel(Log4Qt::Level::WARN_INT) 相同的任务:


# 定义 rootLogger
log4j.rootLogger=WARN, console

# 定义 ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.immediateFlush=true
log4j.appender.console.target=STDOUT_TARGET

# 为 ConsoleAppender 定义 Layout
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%r [%t] %p %c %x - %m%n


然后,使用下面的程序:


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

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

    // 获取 rootLogger
    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 a.exec();
}


注意:在运行程序时,需要将默认的配置文件 log4qt.properties 拷贝至可执行程序所在目录。希望你能很快知道这一点,因为这在前面已经介绍过了,后面不再赘述。


运行程序,输出如下:

13 [0x0000027c2c52ee10] WARN root  - This is a warn message.

13 [0x0000027c2c52ee10] ERROR root  - This is a error message.

14 [0x0000027c2c52ee10] FATAL root  - This is a fatal message.

可以看到,输出的信息和上述示例中的一样。但是,使用配置文件显然更加灵活。


往期推荐




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


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

回复 “入群” 进技术交流群,回复 “1024” 获取海量学习资源。
浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报