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 输出地相关推荐
- 12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了
文章目录 一.为啥要使用第三方Log库,而不用平台自带的Log库 二.Log4j系列库的功能介绍与基本概念 三.Log4Qt库的基本介绍 四.将Log4qt组装成为一个单独模块 五.使用配置文件的方式 ...
- qt的输出中文,数字到表格
最近在做项目的时候,被乱码问题弄得贼烦.于是总结了一下不同类型的字符间的转换问题,供参阅. 首先对于一个qt项目,比较常用的是结构体,结构体定义变量的时候,无非就是int,char,和float,再就 ...
- qt怎么输出一个map里的所有键值_《长安十二时辰》里的MapReduce原理
一 什么是MapReduce MapReduce是一种编程模型,也是一个处理和生成超大数据集的算法模型的相关实现.最早是由谷歌2004年公布的 MapReduce论文,论文描述了大数据的分布式计算方式 ...
- oracle 控制html输出样式,Oracle之sqlplus输出到html
最近由于工作原因,需要把sqlplus里面SQL结果输出到html里面去,本来想用PLSQL Developer这个工具的,但是想到不是每个环境都是可以安装的,所以就研究了一下. 通过研究发现原来or ...
- oracle输出数据,Oracle数据库输出输入
输出输入输出语法dbms_output.put_line(输出内容) begin //输出并换行 dbms_output.put_line('你好'||"张三"); //不换行 d ...
- Oracle - 输出Hello,Oracle!
PL/SQL块 变量的赋值 Oracle输出语句 单引号的使用(字符串不可以使用双引号标明) --环境:Oracle 11g XEset serveroutput on; declarea varch ...
- oracle存储过程输出调试,Oracle存储过程的调试方法
Oracle存储过程可以根据我们的需求进行调试修改,下面就为您介绍如何修改一个Oracle存储过程的实际操作步骤,供您参考学习. 如果你要执行Oracle存储过程,首先你需要写出一个关于输出的字符串& ...
- oracle输出查看,ORACLE关于如何是exp导出还是expdp并查看信息
今天无意同事告诉我这样可以查看是EXPDP还是EXP文件同时可以查看字符集版本等,是一个不错的办法,但是我想说的不是这个方法向后看 这个例子来自网络 DECLARE t1 ku$_dumpfile_i ...
- Qt控制台输出QString
有时候想在控制台输出我们想要的QString变量. 1.qDebug可以实现在控制台终端打印,但我们还是想使用C++中的std::cout<<variable This function ...
最新文章
- 基于PyQt的扫雷游戏实现_下篇
- LeetCode-25:K 个一组翻转链表
- HCIE-Security Day3:防火墙特征和组网方式
- 实现列表CListCtrl可点击编辑
- java语言程序设计 第八版 基础篇_Java语言程序设计基础篇(第八版)编程8.7答案
- 原理图端口符号_什么是电气原理图和电气接线图,二者区别及绘制要求是什么?...
- Linux终端欢迎界面
- Python如何换pip的源(阿里云或清华云等源)
- 华为鸿蒙开发者大赛,超25000位开发者,华为举办首届鸿蒙开发者创新大赛颁奖典礼...
- 服务器装机选哪个系统好,服务器该装08系统好还是03系统好?
- tekton入门 - tasks
- C语言 指针 规范,C语言学习知识指针习题集附规范标准答案.doc
- 最大流/最小割算法总结
- Linux设定密码策略
- 会oracle能找什么岗位的工作,oracle岗位职责
- (附源码)SSM校园一卡通管理系统JAVA计算机毕业设计项目
- 理解深度学习.PDF、国外AIGC各模态产品梳理.pdf、构建企业级的私有大模型.pdf
- 手机纳米镀膜技术教程_纳米技术将在医疗保健的未来中发挥巨大作用
- 2021数据分析赛事来了!
- 大脚插件技能栏美化_血条也性感:TidyPlates姓名板美化增强插件