<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 中的 logger

          共 7271字,需瀏覽 15分鐘

           ·

          2021-04-03 22:21

          在 Log4Qt 中,有一個很重要的類 - Logger,用于提供日志服務(wù)。由于 Logger 是分層架構(gòu)中的核心對象,處于最上層,所以要想使用 Log4Qt 日志框架,這個對象必不可少(強(qiáng)制性要求)。


          要獲取 logger,可以使用以下幾種方式:


          • 調(diào)用 Logger::logger() 或者 LogManager::logger()

          • 使用 LOG4QT_DECLARE_QCLASS_LOGGER

          • 使用 LOG4QT_DECLARE_STATIC_LOGGER


          來看一些簡單的示例,了解下如何使用它們。



          1

          調(diào)用 Logger::logger() 或者 LogManager::logger()


          通過調(diào)用 Logger::logger() 或者 LogManager::logger() 并將類名作為參數(shù),可以檢索指向 logger 的指針。


          來看 Log4Qt 的一個簡單使用,通過基礎(chǔ)配置和 rootLogger()(根 logger,是 Logger::logger() 的一個特殊實現(xiàn))來完成:


          // main.cpp
          #include <QCoreApplication>
          #include <log4qt/basicconfigurator.h>
          #include <log4qt/logger.h>

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

              // 一個簡單的基礎(chǔ)配置
              Log4Qt::BasicConfigurator::configure();

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

              // 輸出
              logger->debug("Hello, Log4Qt!");

              return a.exec();
          }


          輸出如下:

          4 [0x000002015b78f880] DEBUG root  - Hello, Log4Qt!



          2

          使用 LOG4QT_DECLARE_QCLASS_LOGGER


          關(guān)于 LOG4QT_DECLARE_QCLASS_LOGGER,先來了解下它是如何定義的(在 logger.h 中):


          #define LOG4QT_DECLARE_QCLASS_LOGGER                                      \
                      private:                                                              \
                              mutable Log4Qt::ClassLogger mLog4QtClassLogger;                   \
                      public:                                                               \
                              inline Log4Qt::Logger *logger() const                             \
                              {   return mLog4QtClassLogger.logger(this);    }                  \
                      private:


          可以看到,該宏聲明了一個成員函數(shù),用于檢索使用它的類的 Logger。在第一次調(diào)用時,通過調(diào)用 Logger::logger(const char *pName) 來請求 Logger,指針被存儲以在隨后的調(diào)用中返回。


          編寫一個QObject 派生類,然后添加 LOG4QT_DECLARE_QCLASS_LOGGER 宏:


          // my_logger.h
          #ifndef MY_LOGGER_H
          #define MY_LOGGER_H

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

          class MyLogger : public QObject
          {
              Q_OBJECT
              LOG4QT_DECLARE_QCLASS_LOGGER

          public:
              void debug(const QString &message) {
                  logger()->debug(message);
              }
          };

          #endif // MY_LOGGER_H


          然后,打印一條簡單的日志信息:


          // main.cpp
          #include <QCoreApplication>
          #include <log4qt/basicconfigurator.h>
          #include "my_logger.h"

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

              // 一個簡單的基礎(chǔ)配置
              Log4Qt::BasicConfigurator::configure();

              // 使用自定義的 logger
              MyLogger logger;
              logger.debug("Hello, Log4Qt!");

              return a.exec();
          }


          輸出如下:

          4 [0x0000015a036ebf20] DEBUG MyLogger  - Hello, Log4Qt!



          3

          使用 LOG4QT_DECLARE_STATIC_LOGGER


          LOG4QT_DECLARE_QCLASS_LOGGER一樣,LOG4QT_DECLARE_STATIC_LOGGER 也被定義在 logger.h 中:


          #define LOG4QT_DECLARE_STATIC_LOGGER(FUNCTION, CLASS)                     \
                  static Log4Qt::Logger *FUNCTION()                                 \
                  {                                                                 \
                      static Log4Qt::Logger * p_logger(Log4Qt::Logger::logger(#CLASS )); \
                      return p_logger;                                               \
                  }


          該宏聲明了一個靜態(tài)函數(shù) FUNCTION,該函數(shù)返回一個指向 Logger 的指針。在第一次調(diào)用時,通過調(diào)用 Logger::logger( #CLASS ) 來請求 Logger,指針被存儲以在隨后的調(diào)用中返回。


          使用也非常簡單,對上面的 MyLogger 稍作修改:


          // my_logger.h
          #ifndef MY_LOGGER_H
          #define MY_LOGGER_H

          #include <log4qt/logger.h>

          LOG4QT_DECLARE_STATIC_LOGGER(logger, MyLogger)

          class MyLogger
          {

          public:
              void debug(const QString &message) {
                  logger()->debug(message);
              }
          };

          #endif // MY_LOGGER_H


          輸出如下:

          5 [0x00000242cca31490] DEBUG MyLogger  - Hello, Log4Qt!


          ·················· END ··················

          關(guān)注后回復(fù)「1024」,獲取海量學(xué)習(xí)資源

          瀏覽 93
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  无码人妻AⅤ一区二区三区A片一 | 人妻洗澡被强公日日澡 | 中文字幕永久免费视频 | TS人妖系列亚洲一区二区 | 19日韩福利视频 |