您好,登錄后才能下訂單哦!
QSettings中怎么對(duì)Log4Qt進(jìn)行配置 ,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
在 Log4Qt 的初始化過(guò)程中,除了會(huì)使用環(huán)境變量之外,它還會(huì)通過(guò) QSettings 讀取配置。也就是說(shuō),在使用 Logger 之前,需要針對(duì) QSettings 做一些基本設(shè)置:
組織名和應(yīng)用名:通過(guò) QCoreApplication::setOrganizationName() 和 QCoreApplication::setApplicationName() 指定,并且這些名稱(chēng)需要能被 QSettings 找到。
分組:需要有一個(gè)名為 Log4Qt 的分組,在這個(gè)組下面還要有一個(gè)子組 Properties。
配置內(nèi)容:需要符合 Log4Qt 配置語(yǔ)法規(guī)則。
在 Windows 中,可以在注冊(cè)表中添加相應(yīng)的配置。例如,路徑:計(jì)算機(jī)\HKEY_CURRENT_USER\SOFTWARE\MyOrganisation\MyApplication\Log4Qt\Properties:
當(dāng)然,手動(dòng)添加比較麻煩。有一個(gè)簡(jiǎn)單的辦法,就是下面所說(shuō)的用程序設(shè)置 - setupLog4Qt()。
為了實(shí)現(xiàn)這個(gè)功能,可以自定義 QCoreApplication:
#ifndef MY_APPLICATION_H #define MY_APPLICATION_H #include <QCoreApplication> class MyApplication : public QCoreApplication { Q_OBJECT public: MyApplication(int &argc, char **argv); ~MyApplication(); void setupLog4Qt(); }; #endif // MY_APPLICATION_H
在構(gòu)造函數(shù)中,為應(yīng)用程序設(shè)置一些基本信息 - OrganizationName、ApplicationName 以及 OrganizationDomain,以允許 QSettings 能正確的進(jìn)行讀寫(xiě)。
在 setupLog4Qt() 中,我們創(chuàng)建了一個(gè)組“Log4Qt/Properties”,并且對(duì) rootLogger 進(jìn)行了一些簡(jiǎn)單的配置:
#include "my_application.h" #include <log4qt/logger.h> #include <QSettings> MyApplication::MyApplication(int &argc, char **argv) : QCoreApplication(argc, argv) { // 設(shè)置應(yīng)用程序數(shù)據(jù),以允許 Log4Qt 初始化讀取正確的值 setOrganizationName("MyOrganisation"); setApplicationName("MyApplication"); setOrganizationDomain("https://github.com/Waleon"); } MyApplication::~MyApplication() { } void MyApplication::setupLog4Qt() { QSettings s; QStringList groups = s.childGroups(); if (!groups.contains("Log4Qt")) { // 將 Log4Qt 的日志級(jí)別設(shè)置為 INFO s.beginGroup("Log4Qt"); s.setValue("Debug", "INFO"); // 配置日志輸出至文件 logger.log,使用級(jí)別 INFO s.beginGroup("Properties"); s.setValue("log4j.rootLogger", "INFO, logFile"); s.setValue("log4j.appender.logFile", "org.apache.log4j.FileAppender"); s.setValue("log4j.appender.logFile.file", "logger.log"); s.setValue("log4j.appender.logFile.layout", "org.apache.log4j.TTCCLayout"); s.setValue("log4j.appender.logFile.layout.dateFormat", "ISO8601"); } }
這樣一來(lái),通過(guò)調(diào)用 setupLog4Qt() 就能夠設(shè)置 Log4Qt 的配置信息了:
#include <QCoreApplication> #include <log4qt/logger.h> #include "my_application.h" int main(int argc, char *argv[]) { MyApplication app(argc, argv); // 設(shè)置配置信息 app.setupLog4Qt(); // 現(xiàn)在,可以使用 logger 了。 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 0; }
為了更好地說(shuō)明效果,我們分以下幾步進(jìn)行:
在運(yùn)行程序之前,打開(kāi)注冊(cè)表,這時(shí)并不會(huì)有 Log4Qt 相關(guān)的配置。
第一次運(yùn)行程序之后,重新打開(kāi)注冊(cè)表(或者按 F5 刷新),你會(huì)發(fā)現(xiàn) Log4Qt 所需的配置已經(jīng)生成了,并且會(huì)輸出日志。
刪除或者注釋掉 setupLog4Qt() 部分(注冊(cè)表中的配置已經(jīng)有了,不需要再次設(shè)置了),再次運(yùn)行程序,依然會(huì)輸出日志。
根據(jù)配置,在運(yùn)行程序時(shí),會(huì)生成一個(gè)名為 logger.log 的日志文件:
可以看到,它里面包含了所有的日志記錄。
看完上述內(nèi)容,你們掌握QSettings中怎么對(duì)Log4Qt進(jìn)行配置 的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。