Log4Qt日志框架 - 日志格式化(02)https://mp.csdn.net/mp_blog/creation/editor/138417616?spm=1011.2266.3001.6217
一、Log4Qt输出重定向
Log4Qt继承关系图
- AppenderSkeleton:实现一般的功能
- DebugAppender:将日志附加到平台调试(Window-stdout或Linux-stdrr)
- ListAppender:将日志追加到列表
- NullAppender:忽略所有附加请求
- WriteAppender:将日志附加到QTextStream
- ConsoleAppender:附加到stdout或stdrr
- FileAppender:将日志信息附加到文件
- DailRollingFileAppender:以指定频率滚动日志文件
- RollingFileAppender:以达到指定大小时滚动日志文件
1、输出到控制台
#include "log4qt/logger.h"
#include "log4qt/logmanager.h"
#include "log4qt/fileappender.h"
#include "log4qt/loggerrepository.h"
#include "log4qt/patternlayout.h"
#include "log4qt/consoleappender.h"
#include "log4qt/simplelayout.h"
#include "log4qt/ttcclayout.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);#if 1// 创建一个 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 上添加 appenderlogger->addAppender(appender);// 设置级别为 DEBUGlogger->setLevel(Log4Qt::Level::DEBUG_INT);// 输出信息logger->debug("Hello, Log4Qt!");// 关闭 loggerlogger->removeAllAppenders();logger->loggerRepository()->shutdown();
#endifreturn a.exec();
}
2、输出到文件
#include "log4qt/logger.h"
#include "log4qt/logmanager.h"
#include "log4qt/fileappender.h"
#include "log4qt/loggerrepository.h"
#include "log4qt/patternlayout.h"
#include "log4qt/consoleappender.h"
#include "log4qt/simplelayout.h"
#include "log4qt/ttcclayout.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);#if 1// 创建一个 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() + "/Logs/out.log";Log4Qt::FileAppender *appender = new Log4Qt::FileAppender(layout, file, true);//true:append,false:truncateappender->setName("My Appender");appender->activateOptions();// 在 logger 上添加 appenderlogger->addAppender(appender);// 设置级别为 DEBUGlogger->setLevel(Log4Qt::Level::DEBUG_INT);// 输出信息logger->debug("Hello, Log4Qt!");// 关闭 loggerlogger->removeAllAppenders();logger->loggerRepository()->shutdown();
#endifreturn a.exec();
}
3、以指定频率滚动日志文件
枚举 | 模式字符串 | 描述 |
---|---|---|
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" | 每月 |
注:单引号内的内容不会被处理,如:'.'
#include <qdir.h>
#include <qdebug.h>
#include <qthread.h>#include "log4qt/logger.h"
#include "log4qt/logmanager.h"
#include "log4qt/fileappender.h"
#include "log4qt/loggerrepository.h"
#include "log4qt/patternlayout.h"
#include "log4qt/consoleappender.h"
#include "log4qt/simplelayout.h"
#include "log4qt/ttcclayout.h"
#include "log4qt/dailyrollingfileappender.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);#if 1qDebug() << "********** Begin **********";// 使用 rootLogger 打印日志Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();// 创建一个 TTCCLayout(输出时间、线程、Logger 以及消息内容)Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();layout->setName("My Layout");layout->activateOptions();// 创建一个 DailyRollingFileAppender(以指定的频率滚动)Log4Qt::DailyRollingFileAppender *appender = new Log4Qt::DailyRollingFileAppender();appender->setName("My Appender");appender->setLayout(layout);appender->setFile(QCoreApplication::applicationDirPath() + "Logs/log.out");appender->setImmediateFlush(true); // 立即刷新appender->setThreshold(Log4Qt::Level::INFO_INT); // 设置阈值级别为 INFOappender->setAppendFile(true); // 追加的方式appender->setDatePattern(Log4Qt::DailyRollingFileAppender::MINUTELY_ROLLOVER); // 日期模式appender->activateOptions();// 在 logger 上添加 appenderlogger->addAppender(appender);// 设置级别为 DEBUGlogger->setLevel(Log4Qt::Level::DEBUG_INT);int count = 0;while (count < 10) {// 输出信息logger->info("Hello, Log4Qt!");QThread::sleep(30);++count;}// 关闭 loggerlogger->removeAllAppenders();logger->loggerRepository()->shutdown();qDebug() << "********** End **********";
#endifreturn a.exec();
}
4、以达到指定大小时滚动文件
#include <qdir.h>
#include <qdebug.h>
#include <qthread.h>#include "log4qt/logger.h"
#include "log4qt/logmanager.h"
#include "log4qt/fileappender.h"
#include "log4qt/loggerrepository.h"
#include "log4qt/patternlayout.h"
#include "log4qt/consoleappender.h"
#include "log4qt/simplelayout.h"
#include "log4qt/ttcclayout.h"
#include "log4qt/dailyrollingfileappender.h"
#include "log4qt/rollingfileappender.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);#if 1qDebug() << "********** Begin **********";// 使用 rootLogger 打印日志Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();// 创建一个 TTCCLayout(输出时间、线程、Logger 以及消息内容)Log4Qt::TTCCLayout *layout = new Log4Qt::TTCCLayout();layout->setName("My Layout");layout->activateOptions();// 创建一个 RollingFileAppender(滚动多个文件)Log4Qt::RollingFileAppender *appender = new Log4Qt::RollingFileAppender();appender->setName("My Appender");appender->setLayout(layout);appender->setFile(QCoreApplication::applicationDirPath() + "/Logs/log.out");appender->setImmediateFlush(true); // 立即刷新appender->setThreshold(Log4Qt::Level::INFO_INT); // 设置阈值级别为 INFOappender->setAppendFile(true); // 追加的方式// 等价于 appender->setMaximumFileSize(10 * 1024);appender->setMaxFileSize("10KB"); // 在滚动之前设置文件的最大大小appender->setMaxBackupIndex(5); // 设置备份索引appender->activateOptions();// 在 logger 上添加 appenderlogger->addAppender(appender);// 设置级别为 DEBUGlogger->setLevel(Log4Qt::Level::DEBUG_INT);for (int i = 0; i < 1000; i++){logger->info("write RollingFileAppender info to file");}// 关闭 loggerlogger->removeAllAppenders();logger->loggerRepository()->shutdown();qDebug() << "********** End **********";
#endifreturn a.exec();
}