Qt扩展-Log4Qt 简介及配置

这篇具有很好参考价值的文章主要介绍了Qt扩展-Log4Qt 简介及配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

日志是程序调试和溯源问题的一个必不可少的好手段,我们可以用系统的log像 QDebug库,但是为了更快的开发,我们可以用更好的工具,比如说,Log4Qt是基于Qt写的一个日志库。也是使用Qt框架的Apache Software Foundation Log4j包的c++移植版。它的目的是供开源和商业Qt项目使用。好像有Qt4 和Qt5的版本。我用的是Qt5的版本。

项目的地址:https://github.com/MEONMedical/Log4Qt

版本要求

  • 最低Qt版本要求Qt5.12(为了支持Qt版本降至5.3,请使用分支1.4或最新的1.4)。如果要支持Qt 5.7以下的版本,请使用分支1.5或最新的1.5。x版本)
  • 需要c++ 11特性(最低编译器版本MSVC14, GCC 4.8或CLANG 3.3)

基本功能

  • SimpleTimeLayout(“dd.MM。yyyy hh:mm[线程]级别日志消息")
  • ColorConsoleAppender(通过转义序列呈现彩色消息并将其放入控制台)
  • SignalAppender(当日志事件发生时发出信号)
  • DatabaseAppender(附加日志事件到sql表)
  • DatabaseLayout(将日志事件放入sql表列中)
  • Telnet附加程序(将日志事件附加到Telnet客户端)
  • LogStream (qDebug()样式的日志消息追加)
  • MainThreadAppender(通过事件循环发送日志消息的代理appender)
  • XMLLayout支持apache chainsaw
  • DailyFileAppender,每天生成一个日志文件(将当前日期添加到文件名中)
  • 二进制日志记录器
  • Windows调试控制台附加程序

二、编译安装

我使用的是库方式的引入

1. 源码结构

Qt扩展-Log4Qt 简介及配置,# ▶ Qt扫盲,Log4Qt,Qt日志系统,qt日志,qt5
我们可以看到源码的结构是这么几个部分构成的。

  • src 目录
    就是源码的目录,这个目录最后生成的目标就是动态库和静态库,到时候我们也需要把这个头文件给提出来使用
  • example 目录
    就是这个使用的例子目录,在这些例子里面就可以大致知道这个是怎么使用的

2. 库引入

  1. 先把文件给拷贝到自己的项目里

Qt扩展-Log4Qt 简介及配置,# ▶ Qt扫盲,Log4Qt,Qt日志系统,qt日志,qt5
Qt扩展-Log4Qt 简介及配置,# ▶ Qt扫盲,Log4Qt,Qt日志系统,qt日志,qt5

  1. 在项目文件中引入库(我用的是静态库)
INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/lib/log4qt.dll
else:win32-g++: PRE_TARGETDEPS += $$PWD/lib/liblog4qt.a

三、简单的使用

我参考的一个博主的,我们实际使用的时候就是可以去修改这个 QLog4.properties 就能达到我们的目标啦

1. 日志工具类

QLog4.properties

#############
# 输出到控制台
#############
###############################################################################################
# 配置INFO CONSOLE输出到控制台
# log4j.rootLogger日志输出类别和级别:只输出不低于该级别的日志信息DEBUG < INFO < WARN < ERROR < FATAL
log4j.logger.all=ALL,all
log4j.appender.all=org.apache.log4j.ConsoleAppender
# 配置CONSOLE设置为自定义布局模式
log4j.appender.all.layout=org.apache.log4j.PatternLayout
# 配置CONSOLE日志的输出格式: %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行
log4j.appender.all.layout.ConversionPattern=[ %d ] [ %p ] [ %C %t ] [ %l ] --> %m %n
###############################################################################################
 
################
# 输出到日志文件中
################
 
###############################################################################################
log4j.logger.info=INFO,info
# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.info=org.apache.log4j.RollingFileAppender
# 输出文件位置此为项目根目录下的logs文件夹中
log4j.appender.info.File=logs/INFO.log
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.info.appendFile=true
# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件
log4j.appender.info.MaxFileSize=10MB
# 设置滚定文件的最大值5
log4j.appender.info.MaxBackupIndex=5
# 配置logfile为自定义布局模式
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[ %d ] [ %p ] [ %C %t ] [ %l ] --> %m %n
###############################################################################################
 
###############################################################################################
log4j.logger.warn=WARN,warn
# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.warn=org.apache.log4j.RollingFileAppender
# 输出文件位置此为项目根目录下的logs文件夹中
log4j.appender.warn.File=logs/WARN.log
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.warn.appendFile=true
# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件
log4j.appender.warn.MaxFileSize=10MB
# 设置滚定文件的最大值5
log4j.appender.warn.MaxBackupIndex=5
# 配置logfile为自定义布局模式
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=[ %d ] [ %p ] [ %C %t ] [ %l ] --> %m %n
###############################################################################################
 
###############################################################################################
log4j.logger.debug=DEBUG,debug
# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.debug=org.apache.log4j.RollingFileAppender
# 输出文件位置此为项目根目录下的logs文件夹中
log4j.appender.debug.File=logs/DEBUG.log
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.debug.appendFile=true
# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件
log4j.appender.debug.MaxFileSize=10MB
# 设置滚定文件的最大值5
log4j.appender.debug.MaxBackupIndex=5
# 配置logfile为自定义布局模式
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[ %d ] [ %p ] [ %C %t ] [ %l ] --> %m %n
###############################################################################################
 
###############################################################################################
log4j.logger.error=ERROR,error
# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件
log4j.appender.error=org.apache.log4j.RollingFileAppender
# 输出文件位置此为项目根目录下的logs文件夹中
log4j.appender.error.File=logs/ERROR.log
#true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是false
log4j.appender.error.appendFile=true
# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件
log4j.appender.error.MaxFileSize=10MB
# 设置滚定文件的最大值5
log4j.appender.error.MaxBackupIndex=5
# 配置logfile为自定义布局模式
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[ %d ] [ %p ] [ %C %t ] [ %l ] --> %m %n
###############################################################################################

QLogHelper.h

#ifndef QLOGHELPER_H
#define QLOGHELPER_H
 
#include <QObject>
#include <QFileInfo>
#include <QApplication>
#include <QDebug>
#include <QDir>
#include <log4qt/logger.h>
#include <log4qt/basicconfigurator.h>
#include <log4qt/propertyconfigurator.h>

class QLogHelper : public QObject
{
    Q_OBJECT
public:
    explicit QLogHelper(QObject *parent = nullptr);
    QLogHelper(QString configpath, QObject *parent = nullptr);

    ~QLogHelper();
    static QLogHelper *Instance();
    void Init();
    Log4Qt::Logger* GetLogInfo();
    Log4Qt::Logger* GetLogWarn();
    Log4Qt::Logger* GetLogDebug();
    Log4Qt::Logger* GetLogError();
    Log4Qt::Logger* GetLogConsole();
    void LogInfo(QString);
    void LogWarn(QString);
    void LogDebug(QString);
    void LogError(QString);
signals:
 
public slots:
 
private:
    Log4Qt::Logger *logInfo=NULL;
    Log4Qt::Logger *logWarn=NULL;
    Log4Qt::Logger *logDebug=NULL;
    Log4Qt::Logger *logError=NULL;
    Log4Qt::Logger *logConsole=NULL;
    QString confFilePath=NULL;

    static QLogHelper *m_Instance;
};
 
#endif // QLOGHELPER_H

QLogHelper.cpp

#include "QLogHelper.h"
 
using namespace Log4Qt;

QLogHelper * QLogHelper::m_Instance = nullptr;

QLogHelper::QLogHelper(QObject *parent) : QObject(parent)
{
    if(confFilePath.isEmpty()){confFilePath=QApplication::applicationDirPath()+"/config/QLog4.properties";}
    this->Init();
    m_Instance = this;
}

QLogHelper::QLogHelper(QString configpath, QObject *parent)
{
    confFilePath = configpath;
    if(confFilePath.isEmpty()){confFilePath=QApplication::applicationDirPath()+"/config/QLog4.properties";}
    this->Init();

    m_Instance = this;
}
QLogHelper::~QLogHelper(){
}

QLogHelper *QLogHelper::Instance(){
    if(m_Instance == nullptr){
        m_Instance = new QLogHelper();
    }
    return m_Instance;
}
void QLogHelper::Init(){
    //判断文件是否存在
    QFileInfo configFile(this->confFilePath);
    if(!this->confFilePath.isEmpty()&&configFile.exists()){
        PropertyConfigurator::configure(this->confFilePath);
        //实例化节点对象
        if(logInfo==NULL){ logInfo = Log4Qt::Logger::logger("info");}
        if(logWarn==NULL){ logWarn = Log4Qt::Logger::logger("warn");}
        if(logDebug==NULL){ logDebug = Log4Qt::Logger::logger("debug");}
        if(logError==NULL){ logError = Log4Qt::Logger::logger("error");}
        if(logConsole==NULL){ logConsole = Log4Qt::Logger::logger("all");}
    }
}
/**
 * @brief QLogHelper::GetLogInfo
 * @return
 */
Logger* QLogHelper::GetLogInfo(){
    return this->logInfo;
}
/**
 * @brief QLogHelper::GetLogWarn
 * @return
 */
Logger* QLogHelper::GetLogWarn(){
    return this->logWarn;
}
/**
 * @brief QLogHelper::GetLogDebug
 * @return
 */
Logger* QLogHelper::GetLogDebug(){
    return this->logDebug;
}
/**
 * @brief QLogHelper::GetLogError
 * @return
 */
Logger* QLogHelper::GetLogError(){
    return this->logError;
}
/**
 * @brief QLogHelper::GetLogConsole
 * @return
 */
Logger* QLogHelper::GetLogConsole(){
    return this->logConsole;
}
/**
 * @brief QLogHelper::LogInfo
 * @param txt
 */
void QLogHelper::LogInfo(QString txt){
    this->logConsole->info(txt);
    this->logInfo->info(txt);
}
/**
 * @brief QLogHelper::LogWarn
 * @param txt
 */
void QLogHelper::LogWarn(QString txt){
    this->logConsole->warn(txt);
    this->logWarn->warn(txt);
}
/**
 * @brief QLogHelper::LogDebug
 * @param txt
 */
void QLogHelper::LogDebug(QString txt){
    this->logConsole->debug(txt);
    this->logDebug->debug(txt);
}
/**
 * @brief QLogHelper::LogError
 * @param txt
 */
void QLogHelper::LogError(QString txt){
    this->logConsole->error(txt);
    this->logError->error(txt);
}

2. 使用工具类

#include "MainWindow.h"

#include <QApplication>
#include <utils/QLogHelper.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //日志系统初始化
    QLogHelper *p=  new QLogHelper(a.applicationDirPath() + "/configs/QLog4.properties");
    p->LogInfo("Logger Init Successful!");

    MainWindow w;
    w.show();
    return a.exec();
}

Qt扩展-Log4Qt 简介及配置,# ▶ Qt扫盲,Log4Qt,Qt日志系统,qt日志,qt5文章来源地址https://www.toymoban.com/news/detail-726547.html

到了这里,关于Qt扩展-Log4Qt 简介及配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java日志系统log4j2的使用配置和异步日志使用

    Apache Log4j2是Log4j的升级版,参考了logback一些优秀的设计,并且修复了logback的一些问题,而且性能上也有了重大提升,主要有: log4j2对Appender提供了一些异常处理机制 参考了logback的设计,提供自动刷新参数配置,可以自动重载配置而不用重启应用 log4j2利用缓冲区和重用对象

    2024年02月02日
    浏览(46)
  • Log4j2 配置日志记录发送到 kafka 中

    前言 log4j2 在 2.11.0 之后的版本,已经内置了 KafkaAppender 支持可以将打印的日志直接发送到 kafka 中,在这之前如果想要集中收集应用的日志,就需要自定义一个 Layout 来实现,相对来说还是比较麻烦的。 官网文档:Log4j – Log4j 2 Appenders 依赖 配置 注意这里有个 syncSend 控制着是

    2024年02月10日
    浏览(37)
  • 深入理解 SpringBoot 日志框架:从入门到高级应用——(五)Log4j2配置文件详解

    Log4j2 官方文档:https://logging.apache.org/log4j/2.x/manual/index.html Log4j2 是一个Java日志框架,用于记录应用程序在运行时的信息。它是 Log4j 的升级版本,提供了更快的处理速度,更快的日志记录和更丰富的日志记录功能,并支持异步日志记录,减少了对应用程序性能的影响。它可以

    2024年02月05日
    浏览(45)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年04月12日
    浏览(52)
  • 【日志加载 log4j】

    2.编写配置 3.获取日志对象 4.1 Loggers 记录器 4.2 Appenders 输出源 4.3 Layouts 布局 5. 配置文件 log4j.properties

    2024年02月11日
    浏览(91)
  • Java中的Log4j是什么?如何使用Log4j进行日志管理

    Log4j是一个Java日志管理工具,它可以帮助开发者在应用程序中记录日志。它是由Apache软件基金会开发和维护的,已经成为Java开发中最流行的日志管理框架之一。 Log4j可以通过多种方式记录日志,包括控制台输出、文件输出、数据库存储等。此外,Log4j还提供了多种日志级别,

    2024年02月04日
    浏览(56)
  • Java日志框架JUL、Log4j、logback、log4j2使用

    随着软件系统的发展系统业务越来越多、逻辑越来越复杂、代码量越来越多,伴随着容易出现的bug也会越来越多,不论是开发测试阶段还是生产阶段都需要将这些错误及时的捕捉记录下来,方便解决这些问题,否则针对出现的异常无从下手;此时就需要一些日志框架来完成这

    2024年02月15日
    浏览(47)
  • log4j日志框架的使用

    log4j的配置文件可以理解成有2部分 1根日志记录器  2 各appender(输出源)配置 入口 loggerManager的静态代码块 在loggerManager的静态代码块中,完成对配置文件的读取和解析 然后组装成框架的Logger对象、appender对象完成初始化操作 当调用logger.info打印日志时,和logback的流程基本一样

    2024年02月04日
    浏览(61)
  • 用Log4j 2记录日志

    下面代码示例的maven工程中的pom.xml文件中需要增加对Log4j 2的依赖: 配置说明参考文档 https://logging.apache.org/log4j/2.x/manual/configuration.html 配置文件中pattern的详细说明 例如,下面配置文件片段中用到了pattern: pattern的详细说明请参考: https://logging.apache.org/log4j/2.x/manual/layouts.ht

    2024年02月14日
    浏览(97)
  • Log4j疯狂写日志问题排查

    最近有个 Java 系统上线后不久就收到了磁盘使用率告警,磁盘使用率已经超过了 90% 以上,并且磁盘使用率还在不停增长。 由于服务器磁盘被打满,导致了系统正常的业务日志无法继续打印,严重影响了系统的可靠性。 刚开始收到磁盘告警的时候,怀疑是日志级别问题,业务

    2024年02月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包