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 输出地的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php谈谈你对分布式的理解,简谈关于对分
- 下一篇: oracle变量最大多少位,oracle