Log4Qt 日志级别
星标/置顶 公众号👇,硬核文章第一时间送达!
1
日志级别
Log4Qt 定义了一系列日志级别,每个级别都对应一种特定类型的消息事件。通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
日志级别被定义在 Level
类中,由 Level::Value
来表示(按照严重性递增排序):
级别 | 值 | 描述 |
---|---|---|
NULL_INT | 0 | 用于未指定的级别 |
ALL_INT | 32 | 所有级别 |
TRACE_INT | 64 | 比 DEBUG 更细粒度的信息事件 |
DEBUG_INT | 96 | 细粒度的信息事件(该事件对调试应用程序非常有用) |
INFO_INT | 128 | 信息性消息(该消息突出显示了应用程序在粗粒度级别上的进展) |
WARN_INT | 150 | 具有潜在危害的情况 |
ERROR_INT | 182 | 错误事件(该事件可能仍然允许应用程序继续运行) |
FATAL_INT | 214 | 非常严重的错误事件(该事件可能导致应用程序中止) |
OFF_INT | 255 | 最高等级,用于关闭日志记录 |
注意:与 Log4j 不同的是,Log4Qt 除了多出一个新值 NULL_INT
之外,它也不支持自定义级别。
虽然级别众多,但 Log4Qt 只建议使用四个,它们分别是:DEBUG
、INFO
、WARN
、ERROR
。
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
:日志的级别(例如:DEBUG
、INFO
)。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。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.
可以看到,输出的信息和上述示例中的一样。但是,使用配置文件显然更加灵活。
关注公众号「高效程序员」👇,一起优秀!