日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt log4qt 输出到oracle,Log4Qt 输出地

發布時間:2025/3/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt log4qt 输出到oracle,Log4Qt 输出地 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

Log4Qt 支持自定義輸出,格式化由 Layout 完成,輸出地則由 Appender 控制。

Appender 表示將日志輸出到什么地方,常見的 Appender 有 Console(控制臺)、File(文件)等等。

繼承關系圖

Log4Qt::Appender 繼承關系圖:

在該層次結構中,頂級類是 Appender,它是 Log4Qt API 中所有其他輸出地的基類。

AppenderSkeleton:實現一般 Appender 的功能

通常來講,自定義輸出需要繼承 AppenderSkeleton,并實現其中的幾個方法。

DebugAppender:將日志事件附加到特定于平臺的調試輸出(在 Windows 上附加到 Debugger,其它系統上附加到 stderr)

ListAppender:將日志記錄事件追加到列表中,供后續處理。

NullAppender:忽略所有要附加的請求

當然,最常用的是以下幾個:

WriterAppender:將日志事件附加到 QTextStream

ConsoleAppender:附加到 stdout 或 stderr

FileAppender:將日志事件附加到文件

DailyRollingFileAppender:以指定的頻率滾動日志文件

RollingFileAppender:在達到特定大小時滾動日志文件

輸出到控制臺

在項目開發階段,往往需要在控制臺中輸出日志的內容,這對于調試代碼來說非常方便。

這時,ConsoleAppender 會十分有用:

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

// 創建一個 TTCCLayout(輸出時間、線程、Logger 以及消息內容)

Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();

Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();

layout->setName("My Layout");

layout->activateOptions();

// 創建一個 ConsoleAppender(將日志內容輸出到控制臺上)

Log4Qt::ConsoleAppender *appender = new Log4Qt::ConsoleAppender(layout, Log4Qt::ConsoleAppender::STDOUT_TARGET);

appender->setName("My Appender");

appender->activateOptions();

// 在 logger 上添加 appender

logger->addAppender(appender);

// 設置級別為 DEBUG

logger->setLevel(Log4Qt::Level::DEBUG_INT);

// 輸出信息

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

// 關閉 logger

logger->removeAllAppenders();

logger->loggerRepository()->shutdown();

return a.exec();

}

其中,Logger 用于提供日志記錄服務,Layout 用于控制消息的輸出格式。

在程序的最后,記得關閉 Logger - 刪除之前添加的所有 Appender,并關閉 LoggerRepository(以釋放 Appender 持有的資源)。

輸出到文件

但在實際的產品階段,我們更希望將日志輸出到指定的文件中,以便后續跟蹤程序的行為、定位問題。

這時,就需要用到 FileAppender:

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

// 創建一個 TTCCLayout(輸出時間、線程、Logger 以及消息內容)

Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();

Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();

layout->setName("My Layout");

layout->activateOptions();

// 創建一個 FileAppender(將日志內容輸出到文件中)

QString file = QCoreApplication::applicationDirPath() + "/debug.log";

Log4Qt::FileAppender *appender = new Log4Qt::FileAppender(layout, file, true);

appender->setName("My Appender");

appender->activateOptions();

// 在 logger 上添加 appender

logger->addAppender(appender);

// 設置級別為 DEBUG

logger->setLevel(Log4Qt::Level::DEBUG_INT);

// 輸出信息

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

// 關閉 logger

logger->removeAllAppenders();

logger->loggerRepository()->shutdown();

return a.exec();

}

在構造 FileAppender 時,可以用第三個參數指定文件的打開方式,true 表示以 Append(追加)方式打開,false 表示以 Truncate(截斷) 方式打開。除此之外,也可以使用 setAppendFile(bool append)。

雖然 FileAppender 提供了對日志文件的支持,但都是一些最基本的操作。倘若要實現周期性生成日志文件、限制文件大小和個數等一些更高級的控制,則需要用到其派生類 - DailyRollingFileAppender 和 RollingFileAppender。

以指定的頻率滾動日志文件

為了根據日期時間來定位日志,使其更加清晰易查,可以周期性生成日志文件(例如:DAILY_ROLLOVER 指定每天生成一個新文件),這由 DailyRollingFileAppender 來完成。

DatePattern 用于指定日期模式(頻率),其有效值包括:

枚舉

模式字符串

描述

MINUTELY_ROLLOVER

"'.'yyyy-MM-dd-hh-mm"

每分鐘

HOURLY_ROLLOVER

"'.'yyyy-MM-dd-hh"

每小時

HALFDAILY_ROLLOVER

"'.'yyyy-MM-dd-a"

每半天

DAILY_ROLLOVER(默認值)

"'.'yyyy-MM-dd"

每天

WEEKLY_ROLLOVER

"'.'yyyy-ww"

每周

MONTHLY_ROLLOVER

"'.'yyyy-MM"

每月

注意: DatePattern 中不用處理的文字要放到單引號('')中,如上面的 '.'。

為了方便測試,以最短的間隔(每分鐘)生成日志文件:

可以看到,文件名后自動加上了日期時間,很容易區分。

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

// 創建一個 TTCCLayout(輸出時間、線程、Logger 以及消息內容)

Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();

Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();

layout->setName("My Layout");

layout->activateOptions();

// 創建一個 DailyRollingFileAppender(每分鐘生成一個新文件)

QString file = QCoreApplication::applicationDirPath() + "/debug.log";

Log4Qt::DailyRollingFileAppender *appender = new Log4Qt::DailyRollingFileAppender(layout, file, "'.'yyyy-MM-dd-hh-mm");

appender->setName("My Appender");

appender->activateOptions();

// 在 logger 上添加 appender

logger->addAppender(appender);

// 設置級別為 DEBUG

logger->setLevel(Log4Qt::Level::DEBUG_INT);

int count = 0;

while (count < 10) {

// 輸出信息

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

Sleep(30 *1000);

++count;

}

// 關閉 logger

logger->removeAllAppenders();

logger->loggerRepository()->shutdown();

return a.exec();

}

要設置頻率,除了可以在 DailyRollingFileAppender 的構造函數中指定一個模式字符串之外,還可以使用 setDatePattern(DatePattern datePattern) 指定一個枚舉值進行設置。

在達到特定大小時滾動日志文件

隨著時間的推移,日志文件會越來越多、越來越大,倘若不進行數量和大小上的限制,最后日志將會占滿整個硬盤。

RollingFileAppender 使用 MaxFileSize 和 MaxBackupIndex 來限制日志文件的大小和數量。當產生多個日志文件時,會在日志名稱后面加上“.1”、“.2”、… 這樣的后綴。

下面,來讀取一個文件,并將其內容寫入到我們的日志文件中:

在此過程中,限制每個日志文件的最大大小為 10 KB,最大文件數為 5 個:

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

// 創建一個 TTCCLayout(輸出時間、線程、Logger 以及消息內容)

Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();

Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();

layout->setName("My Layout");

layout->activateOptions();

// 創建一個 RollingFileAppender

QString file = QCoreApplication::applicationDirPath() + "/debug.log";

Log4Qt::RollingFileAppender *appender = new Log4Qt::RollingFileAppender(layout, file, true);

appender->setName("My Appender");

appender->setMaximumFileSize(10 * 1024); // 文件的最大大小為 10 KB

appender->setMaxBackupIndex(5); // 最大文件數為 5 個

appender->activateOptions();

// 在 logger 上添加 appender

logger->addAppender(appender);

// 設置級別為 DEBUG

logger->setLevel(Log4Qt::Level::DEBUG_INT);

// 讀取文件,并寫入日志

QFile f("E:/Backup.log");

if (f.open(QIODevice::ReadOnly | QIODevice::Text)) {

QTextStream in(&f);

QString line;

while (!in.atEnd()) {

line = in.readLine();

logger->debug(line);

}

f.close();

}

// 關閉 logger

logger->removeAllAppenders();

logger->loggerRepository()->shutdown();

return a.exec();

}

總結

以上是生活随笔為你收集整理的qt log4qt 输出到oracle,Log4Qt 输出地的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。