今天来聊聊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
程序运行后,会生成日志目录,如下所示:
文中相关资源已经上传,如有需要,自行下载!