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 | 錯誤事件(該事件可能仍然允許應用程序繼續(xù)運行) |
FATAL_INT | 214 | 非常嚴重的錯誤事件(該事件可能導致應用程序中止) |
OFF_INT | 255 | 最高等級,用于關閉日志記錄 |
注意:與 Log4j 不同的是,Log4Qt 除了多出一個新值 NULL_INT 之外,它也不支持自定義級別。
雖然級別眾多,但 Log4Qt 只建議使用四個,它們分別是:DEBUG、INFO、WARN、ERROR。
2
日志級別的工作方式
關于日志級別,Log4Qt 有一個核心規(guī)則:
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,執(zhí)行與上例中使用 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 拷貝至可執(zhí)行程序所在目錄。希望你能很快知道這一點,因為這在前面已經介紹過了,后面不再贅述。
運行程序,輸出如下:
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.
可以看到,輸出的信息和上述示例中的一樣。但是,使用配置文件顯然更加靈活。




關注公眾號「高效程序員」??,一起優(yōu)秀!
