<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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錯誤事件(該事件可能仍然允許應用程序繼續(xù)運行)
          FATAL_INT214非常嚴重的錯誤事件(該事件可能導致應用程序中止)
          OFF_INT255最高等級,用于關閉日志記錄


          注意:與 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:日志的級別(例如:DEBUGINFO)。通過在這里定義的級別,可以控制到應用程序中相應級別的日志信息的開關。

          • 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.

          可以看到,輸出的信息和上述示例中的一樣。但是,使用配置文件顯然更加靈活。


          往期推薦




          專輯 | 趣味設計模式
          專輯 | 音視頻開發(fā)
          專輯 | C++ 進階
          專輯 | 超硬核 Qt
          專輯 | 玩轉 Linux
          專輯 | GitHub 開源推薦
          專輯 | 程序人生


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

          回復 “入群” 進技術交流群,回復 “1024” 獲取海量學習資源。
          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜牛牛 | 中文字幕视频三区 | 欧美一级特黄色aa大片 | 大鸡巴91 | 高潮喷水不止视频 |