<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Qt雜談7.淺談Qt日志框架那些事

      1 概述

      Qt日志框架是Qt提供的用于日志記錄和輸出的模塊。它提供了靈活而強(qiáng)大的日志系統(tǒng),可以幫助開發(fā)者在應(yīng)用程序中有效地管理和記錄日志。

      它的主要特性包括:

      • 日志類別和級別: 可以定義不同的日志類別和級別,例如調(diào)試、信息、警告、錯(cuò)誤等。這樣可以更好地組織和分類日志消息。
      • 過濾和記錄控制: 可以基于日志級別和類別設(shè)置過濾規(guī)則,選擇記錄哪些日志消息并輸出到哪些目標(biāo),如控制臺、文件、網(wǎng)絡(luò)等。
      • 動(dòng)態(tài)調(diào)整: 在運(yùn)行時(shí)可以動(dòng)態(tài)調(diào)整日志的過濾規(guī)則和記錄目標(biāo),以滿足不同階段和需求的日志記錄需求。
      • 多線程支持: 可以在多線程環(huán)境中安全使用日志系統(tǒng),確保日志消息的正確記錄和輸出。

      Qt 的日志框架是建立在 QLoggingCategory 類的基礎(chǔ)上的。QLoggingCategory 類是用來管理和控制 Qt 日志輸出的核心類,它提供了控制日志消息輸出級別、設(shè)置過濾規(guī)則、安裝自定義過濾器等功能,以便開發(fā)人員能夠更靈活地控制應(yīng)用程序的日志輸出,從而方便調(diào)試、問題排查和日志輸出的定制化。

      2 實(shí)際應(yīng)用

      2.1 基本流程

      假設(shè)有一個(gè)使用Qt編寫的圖形用戶界面應(yīng)用程序,其中包含網(wǎng)絡(luò)模塊和數(shù)據(jù)庫模塊。我們可以在每個(gè)模塊的頭文件中使用Q_DECLARE_LOGGING_CATEGORY宏來聲明相應(yīng)的日志類別:

      // networkmodule.h
      #include <QLoggingCategory>
      Q_DECLARE_LOGGING_CATEGORY(networkModule)
      
      // databasemodule.h
      #include <QLoggingCategory>
      Q_DECLARE_LOGGING_CATEGORY(databaseModule)
      

      然后,在對應(yīng)的源文件中使用Q_LOGGING_CATEGORY宏定義日志類別的實(shí)例:

      // networkmodule.cpp
      #include "networkmodule.h"
      Q_LOGGING_CATEGORY(networkModule, "networkmodule")
      
      // databasemodule.cpp
      #include "databasemodule.h"
      Q_LOGGING_CATEGORY(databaseModule, "databasemodule")
      

      現(xiàn)在假設(shè)我們想要將網(wǎng)絡(luò)模塊的日志消息輸出到控制臺,并只保留警告級別以上的消息,而數(shù)據(jù)庫模塊的日志消息則同時(shí)輸出到控制臺和日志文件中。

      可以按照如下方式進(jìn)行配置:

      QLoggingCategory::setFilterRules("networkmodule.debug=false\n"
                                      "networkmodule.warning=true\n"
                                      "databasemodule.debug=true\n"
                                      "databasemodule.warning=true");
      

      在這個(gè)例子中,設(shè)置了日志類別的過濾規(guī)則。對于網(wǎng)絡(luò)模塊,禁用了調(diào)試級別的日志消息輸出,只允許警告級別的消息輸出;而對于數(shù)據(jù)庫模塊,允許所有級別的消息輸出。

      隨后,使用qCDebug或qCWarning等宏輸出的日志消息將根據(jù)這些過濾規(guī)則進(jìn)行處理,符合規(guī)則的消息將被輸出到指定的日志目標(biāo)中。這種靈活的配置方式可以根據(jù)實(shí)際需求,定制化地管理不同模塊的日志輸出行為。

      2.2 涉及的宏

      Q_DECLARE_LOGGING_CATEGORY 和 Q_LOGGING_CATEGORY 是 Qt 框架中用于日志記錄的兩個(gè)宏,它們分別用于不同的場景。

      • Q_DECLARE_LOGGING_CATEGORY:用于類的聲明中聲明日志類別,通常情況下,會(huì)將這個(gè)宏放在類的定義中,以便在類的實(shí)現(xiàn)文件中使用聲明的日志類別進(jìn)行日志輸出。這樣可以讓每個(gè)類都有自己的日志類別,并進(jìn)行更細(xì)粒度的日志控制。

      • Q_LOGGING_CATEGORY:用于在全局范圍內(nèi)定義全局的日志類別,通常情況下,會(huì)將這個(gè)宏放在全局范圍的一個(gè)源文件中,以定義全局的日志類別供整個(gè)項(xiàng)目使用。

      Q_LOGGING_CATEGORY接受兩個(gè)參數(shù)來定義一個(gè)自定義的日志類別:Q_LOGGING_CATEGORY(category, categoryName),category指定日志類別的名稱,通常是一個(gè)全局變量,它必須是一個(gè)有效的標(biāo)識符;categoryName指定日志類別的顯示名稱,是一個(gè)字符串,用于在日志輸出中標(biāo)識該類別。

      這兩個(gè)宏一起使用,可以更好地管理和組織項(xiàng)目中的日志輸出,提高日志的可維護(hù)性和靈活性。

      2.3 完整示例

      1. 首先,在頭文件中使用 Q_DECLARE_LOGGING_CATEGORY 宏聲明一個(gè)日志類別。通常,將它放在類的聲明中,以便每個(gè)類都有自己的日志類別。
      // myclass.h
      #include <QObject>
      #include <QLoggingCategory>
      
      Q_DECLARE_LOGGING_CATEGORY(myClassLog)
      
      class MyClass : public QObject
      {
          Q_OBJECT
      
      public:
          MyClass(QObject *parent = nullptr);
      
      public slots:
          void doSomething();
      };
      
      1. 在實(shí)現(xiàn)文件中使用 Q_LOGGING_CATEGORY 宏來定義并初始化日志類別。通常,將它放在全局范圍的一個(gè)源文件中。
      // myclass.cpp
      #include "myclass.h"
      
      Q_LOGGING_CATEGORY(myClassLog, "myclass")
      
      MyClass::MyClass(QObject *parent)
          : QObject(parent)
      {
          //qCDebug(<日志類別>) << "日志消息"
          qCDebug(myClassLog) << "MyClass constructor called";
      }
      
      void MyClass::doSomething()
      {
          qCInfo(myClassLog) << "Doing something";
          // ...
      }
      

      qCDebug是Qt框架提供的宏,用于輸出調(diào)試級別的日志消息,與qDebug相比,qCDebug允許通過Qt的日志類別和過濾規(guī)則來控制是否輸出日志消息,并可以進(jìn)一步定制化日志的行為;qDebug通常用于快速調(diào)試和測試,默認(rèn)的日志類別名稱是 “default”,這意味著,如果沒有為日志消息指定特定的日志類別,那么消息將被發(fā)送到名為 “default” 的日志類別中。而qCDebug更適合在較大的項(xiàng)目中使用,并且對于調(diào)試輸出有更多的配置需求,需要顯式地指定日志類別。

      1. 在代碼的其他位置,使用類中聲明的日志類別進(jìn)行日志輸出。
      #include <QCoreApplication>
      #include "myclass.h"
      
      Q_LOGGING_CATEGORY(globalLog, "global")
      
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
      
          qCInfo(globalLog) << "Application started";
      
          MyClass myObject;
          myObject.doSomething();
      
          qCWarning(myClassLog) << "Warning message";
      
          qCInfo(globalLog) << "Application finished";
      
          return a.exec();
      }
      

      注意:對于全局日志類別 globalLog,通常來說是不需要顯式聲明的。在許多情況下,Qt 應(yīng)用程序中的全局日志類別不需要單獨(dú)聲明,而是直接在全局范圍內(nèi)使用 Q_LOGGING_CATEGORY 宏進(jìn)行定義。

      1. 結(jié)果輸出
      global: Application started
      myclass: MyClass constructor called
      myclass: Doing something
      myclass: Warning message
      global: Application finished
      

      2.4 日志過濾

      前面也有提及到,QLoggingCategory 類可以使用 setFilterRules() 方法來配置日志過濾規(guī)則,該方法允許定義哪些日志類別和級別應(yīng)該被記錄。配置規(guī)則的格式如下:

      QLoggingCategory::setFilterRules("categoryName.rule=type");
      

      其中,每個(gè)規(guī)則由以下部分組成:

      • categoryName:日志類別的名稱,可以是預(yù)定義的類別,也可以是自定義類別。
      • rule:日志級別或特定的過濾規(guī)則。
      • type:要應(yīng)用于該類別的規(guī)則類型,可以是 true(記錄該級別),false(不記錄該級別),或者整數(shù)值(記錄特定級別及比它更高的級別)。

      例如:

      QLoggingCategory::setFilterRules("myapp.debug=false\nmyapp.warning=true");
      

      在這個(gè)示例中,規(guī)則表示對于名為 myapp 的日志類別,不記錄調(diào)試級別的日志消息,只記錄警告級別的日志消息。

      針對2.3節(jié)的例子,大家可以自行配置過濾規(guī)則,看看是否和預(yù)期效果一致。

      3 總結(jié)

      Qt日志框架提供了強(qiáng)大的日志功能,可以方便地在應(yīng)用程序中輸出日志消息并進(jìn)行管理。使用 Q_DECLARE_LOGGING_CATEGORY 宏可以在類中聲明日志類別,使用 Q_LOGGING_CATEGORY 宏可以在全局范圍內(nèi)定義和初始化日志類別。通過這些日志類別,我們可以利用 qCDebug()、qCInfo()、qCWarning() 等函數(shù)輸出不同級別的日志信息。此外,可以根據(jù)需要設(shè)置特定的過濾條件,過濾出需要的日志消息。總的來說,Qt日志框架提供了一種簡潔、靈活和可配置的方法來管理和輸出日志,有助于開發(fā)人員進(jìn)行調(diào)試、錯(cuò)誤排查以及日志記錄等工作。

      posted @ 2023-12-25 18:28  Qt小羅  閱讀(2162)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久99久国产麻精品66| 成人亚洲国产精品一区不卡| 在线国产你懂的| 国内精品视频一区二区三区八戒 | 国产精选一区二区三区| 成人做受120秒试看试看视频| 漂亮的保姆hd完整版免费韩国 | 亚洲a免费| 日韩一级伦理片一区二区| 九九热精品免费视频| 2022最新国产在线不卡a| 精品亚洲国产成人av在线| 国产微拍一区二区三区四区| 亚洲欧美在线一区中文字幕| 国产福利午夜十八禁久久| 亚洲v欧美v国产v在线观看| 成人网站网址导航| 精品国产久一区二区三区| 在线A级毛片无码免费真人| 熟女人妻视频| 国产免费午夜福利在线播放| 国产精品成人av电影不卡| 精品亚洲国产成人av| 久久99日韩国产精品久久99| 精品综合一区二区三区四区| 亚洲欧美在线观看品| 久久天天躁夜夜躁狠狠躁2022| 亚洲av无码乱码在线观看野外| 亚洲一区二区三区av无码| 成人精品一区日本无码网| 午夜精品久久久久久久2023| 起碰免费公开97在线视频| 国产综合久久99久久| 波多野无码中文字幕av专区| 精品国产AV无码一区二区三区| 国产黑色丝袜在线播放| 通海县| 成人国产av精品免费网| 国产免费高清69式视频在线观看 | 国产日韩一区二区天美麻豆| 久久精品国产亚洲av麻豆小说 |