Log4Qt

  今天来聊聊Log4Qt,看了网上的相关文章,不是很全面,特此整理,供大家学习!

1 背景

  大家都熟知JAVA的日志框架Apache Log4j,而Log4Qt 就是Log4j在Qt上的移植。Log4Qt有两个项目:

项目地址支持Qt版本是否维护是否推荐
http://log4qt.sourceforge.net仅支持 Qt4停止维护不推荐
https://github.com/MEONMedical/Log4Qt支持 Qt各版本持续维护推荐

2 使用方式

  Log4Qt可以编译使用,也可以源码使用,下面我们一步步来介绍。
  选择项目https://github.com/MEONMedical/Log4Qt,下载一个版本,这里选择1.5.1版本,下载后源码目录如下:
在这里插入图片描述

2.1 编译使用

  QtCreator打开上面下载的log4qt源码,根据使用场景选择msvc还是mingw编译器进行编译。

2.1.1 MingW编译

  这里使用的是Qt 5.14.2 MinGW64 Debug编译,编译后的目录如下:
在这里插入图片描述
  上面bin文件夹内容如下:
在这里插入图片描述
  新建一个qt项目,同级下新建3个文件夹。其中bin文件夹放log4qt.dll,lib里面放liblog4qt.a,然后将Log4Qt-1.5.1\src\log4qt文件夹拷贝过来。
在这里插入图片描述
  打开新建的项目,添加库-外部库-选择库文件,如下图所示:
在这里插入图片描述
  代码里添加log4qt头文件和相关代码,如下:
在这里插入图片描述
  运行程序,效果如下。注意:需要把log4qt.dll复制到运行exe同级目录下,不然程序会崩溃。

在这里插入图片描述

2.1.2 MSVC编译

  这里使用的是Qt 5.14.2 MSVC2017_64 Debug编译,编译后的目录和mingw的类似。
  新建一个qt项目,同级下新建3个文件夹。其中bin文件夹放log4qt.dll,lib里面放log4qt.lib,然后将Log4Qt-1.5.1\src\log4qt文件夹拷贝过来。
  打开项目,添加库-外部库-选择库文件,如下图所示:
在这里插入图片描述
  代码里添加log4qt头文件和相关代码,运行程序,效果如下。注意:需要把log4qt.dll复制到运行exe同级目录下,不然程序会崩溃。
在这里插入图片描述

2.2 源码使用

  新建一个项目,将源码Log4Qt-master文件夹复制到创建的项目下。注意:此处换了代码,使用的是Log4Qt-master,我发现使用1.5.1的分支运行程序会报错。
  打开项目,在pro文件中加入:

# 定义 Log4Qt 源码根目录
LOG4QT_ROOT_PATH = $$PWD/Log4Qt-master

# 指定编译项目时应该被搜索的 #include 目录
INCLUDEPATH += $$LOG4QT_ROOT_PATH/src \
               $$LOG4QT_ROOT_PATH/src/log4qt \
               $$LOG4QT_ROOT_PATH/include \
               $$LOG4QT_ROOT_PATH/include/log4qt

# 将 Log4Qt 源代码添加至项目中
include($$LOG4QT_ROOT_PATH/src/log4qt/log4qt.pri)
include($$LOG4QT_ROOT_PATH/build.pri)
include($$LOG4QT_ROOT_PATH/g++.pri)

在这里插入图片描述
  代码里添加log4qt头文件和相关代码,效果如下。
在这里插入图片描述

3 配置文件

  上面只是简单的使用,log4qt其实很强大,它还可以通过环境变量、 QSettings、配置文件进行配置。这里推荐使用自定义配置文件,可以根据需要进行修改。
  添加如下代码:

    Log4Qt::PropertyConfigurator::configure(a.applicationDirPath() + "/log.conf");

    MYLOGGER1->debug("log debug");
    MYLOGGER1->warn("log warn");
    MYLOGGER2->debug("log debug");
    MYLOGGER2->warn("log warn");
    MYLOGGER3->debug("log debug");
    MYLOGGER3->warn("log warn");
    MYLOGGER4->debug("log debug");
    MYLOGGER4->warn("log warn");

在这里插入图片描述
  配置文件如下,里面展示了各种形式的输出,将配置文件放在对应的路径下:

#设置储存log文件的根目录
logpath=./Logs
# 配置日志的输出格式: %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行
logConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.zzz}][%-5p][%-20t] >> %m %n
#配置加载前强制重置日志框架
log4j.reset=true
 
#设置是否监听QDebug输出的字符串
log4j.handleQtMessages=true
#在运行中,是否监视此文件配置的变化
log4j.watchThisFile=false
 
#设置根Logger的输出log等级为All
# log4j.rootLogger日志输出类别和级别:只输出不低于该级别的日志信息	DEBUG < INFO < WARN < ERROR < FATAL
#设置Log输出的几种输出源(appender):console, daily, rolling
log4j.rootLogger=WARN,console

############
#输出到控制台
############
#指定扩展器
log4j.appender.console=org.apache.log4j.ConsoleAppender
#输出
log4j.appender.console.Target =STDOUT_TARGET
#输出DEBUG级别以上的日志
log4j.appender.console.Threshold=DEBUG 
#日志布局类型(自由模式)
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n

#############
#FileAppender 将日志输出到指定的文件中,不会新建或者重命名,也不会自动清理
#############
#指定扩展器
log4j.logger.mylogger1=WARN,test1
log4j.appender.test1=org.apache.log4j.FileAppender
#输出DEBUG级别以上的日志
log4j.appender.test1.Threshold=DEBUG
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.test1.appendFile=true
#日志文件路径
log4j.appender.test1.File=${logpath}/test1.log
#日志布局类型(自由模式)
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n

#############
#RollingFileAppender 输出到指定文件中,超过指定文件大小,文件会以*.1命名,超过指定保存个数,会删掉之前的日志
#############
#指定扩展器
log4j.logger.mylogger2=WARN,test2
log4j.appender.test2=org.apache.log4j.RollingFileAppender
#输出DEBUG级别以上的日志
log4j.appender.test2.Threshold=DEBUG
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.test2.appendFile=true
#日志文件路径
log4j.appender.test2.File=${logpath}/test2.log
#文件最大容量(到达后创建新的文件), 后缀可以为KB,MB,GB
log4j.appender.test2.MaxFileSize=4096KB
#指定可以产生的滚动文件的最大数
log4j.appender.test2.MaxBackupIndex=7
#日志布局类型(自由模式)
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n


#############
#DailyFileAppender  每天新建一个文件,保存当天的日志,超过指定的天数,删除最开始的日志
#############
#指定扩展器
log4j.logger.mylogger3=WARN,test3
log4j.appender.test3=org.apache.log4j.DailyFileAppender
#输出DEBUG级别以上的日志
log4j.appender.test3.Threshold=DEBUG
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.test3.appendFile=true
#日志文件路径
log4j.appender.test3.File=${logpath}/test3.log
#设置保留天数
log4j.appender.test3.keepDays=30
#日志布局类型(自由模式)
log4j.appender.test3.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.test3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n
 
#############
#DailyRollingFileAppender   以指定的滚动频率重名命名文件
#############
#指定扩展器
log4j.logger.mylogger4=WARN,test4
log4j.appender.test4=org.apache.log4j.DailyRollingFileAppender
#输出DEBUG级别以上的日志
log4j.appender.test4.Threshold=DEBUG
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.test4.appendFile=true
#日志文件路径
log4j.appender.test4.File=${logpath}/test4.log
#设置滚动频率
log4j.appender.test4.DatePattern=’.‘yyyy-MM-dd-HH-mm
#日志布局类型(自由模式)
log4j.appender.test4.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.test4.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n

  程序运行后,会生成日志目录,如下所示:
在这里插入图片描述
  文中相关资源已经上传,如有需要,自行下载!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值