Qt Log4qt实现的日志记录

6、Qt—Log4Qt使用小记1 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C ++端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apache Log4J 的Qt移植版,Log4Qt主要是用来记录日志(有助于程序调试)。Logger提供日志记录服务,可以有多个Logger存在,每个有它们自己的名字。Logger间存在隶属关系,有一个Logger称为根Logger。Appender。 阅读详情

0. 前言

很久没有更新博客, 现在转Qt方向, 重新开始写代码, 博客也不能落下, 每天的学习坚持记录在这里.

Log4qt 是一个日志记录的第三方库, 可以实现debug, error, info, warn 四种日志类型的输出, 使用也很方便.

log4qt: https://sourceforge.net/projects/log4qt/files/

下载后将lo4qt文档导入项目即可

log封装类是用的红模仿博主的, 感谢分享

此案例是在qt5下实现的, qt4的等以后再加

 

1. 实现效果

在build目录下会生成log文件夹, 有四个txt文件

在程序中调用API即可, info 的函数如下调用

Log::instance()->info("信息测试日志系统当中...");

 

2. 运行环境

win10 qt5.14.0

 

3. 目录结构

4. 源码编译

main.cpp

#include <QCoreApplication>
#include <QTextCodec>
#include <QThread>
#include "log.h"
#include "define.h"

using namespace Log4Qt;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QThread::currentThread()->setObjectName("主线程");

    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForLocale(codec);

    Log::instance()->init(QCoreApplication::applicationDirPath() + "/" +"etc/log.conf");
    Log::instance()->debug("调试测试日志系统当中...");
    Log::instance()->info("信息测试日志系统当中...");
    Log::instance()->warn("警告测试日志系统当中...");
    Log::instance()->error("错误测试日志系统当中...");

    return a.exec();
}

define.h

// 开发过程中暂时使用qDebug替代 1-使用debug打印输出  0-使用日志输出
#if 0

// 以文件行列记录信息,非以类名对象形式
#define LOG_DEBUG(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("DEBUG")  \
                                           .arg(msg);

#define LOG_INFO(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("INFO")  \
                                           .arg(msg);

#define LOG_WARN(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("WARN")  \
                                           .arg(msg);

#define LOG_ERROR(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("ERROR")  \
                                           .arg(msg);


// 以类名对象形式记录信息
#define LOG_OBJECT_DEBUG(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1::%2:%3").arg(this->metaObject()->className()).arg(__FUNCTION__).arg(__LINE__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("DEBUG")  \
                                           .arg(msg);

#define LOG_OBJECT_INFO(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1::%2:%3").arg(this->metaObject()->className()).arg(__FUNCTION__).arg(__LINE__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("INFO")  \
                                           .arg(msg);

#define LOG_OBJECT_WARN(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1::%2:%3").arg(this->metaObject()->className()).arg(__FUNCTION__).arg(__LINE__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("WARN")  \
                                           .arg(msg);

#define LOG_OBJECT_ERROR(msg) qDebug() << QString("[%1][%2][%3][%4]%5")  \
                                           .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"))  \
                                           .arg(QString("%1::%2:%3").arg(this->metaObject()->className()).arg(__FUNCTION__).arg(__LINE__))  \
                                           .arg(QThread::currentThread()->objectName())  \
                                           .arg("ERROR")  \
                                           .arg(msg);


// 写入日志系统
#else

// 以文件行列记录信息,非以类名对象形式
#define LOG_DEBUG(msg) Log::instance()->debug(QString("[%1]%2").arg(QString("%1:%2:%3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__)).arg(msg));

#define LOG_INFO(msg) Log::instance()->info(msg);

#define LOG_WARN(msg) Log::instance()->warn(msg);

#define LOG_ERROR(msg) Log::instance()->error(msg);


// 以类名对象形式记录信息
#define LOG_OBJECT_DEBUG(msg) Log::instance()->debug(QString("[%1]%2").arg(QString("%1::%2:%3").arg(this->metaObject()->className()).arg(__FUNCTION__).arg(__LINE__)).arg(msg));

#define LOG_OBJECT_INFO(msg) Log::instance()->info(msg);

#define LOG_OBJECT_WARN(msg) Log::instance()->warn(msg);

#define LOG_OBJECT_ERROR(msg) Log::instance()->error(msg);


#endif

log.h

#define LOG_H

#include <QObject>
#include <QMutex>
#include <QMutexLocker>
#include <QCoreApplication>

#include "log4qt/logger.h"
#include "log4qt/basicconfigurator.h"

/************************************************************\
 * 类名:Log
 * 描述:封装log4qt开源库类
 * 注意:模块已带log4qt for qt4 和 qt5两个版本;
 *      模块已带log4qt配置文件,分为4级别:DEBUG > INFO > WARN > ERROR
 * 信号:
 * 函数:
 *      instance() - 获取日志唯一实例
 * 槽函数:
 *      slot_init() - 初始化加载配置文件
 *      slot_debug() - 调试级别日志
 *      slot_info() - 信息级别日志
 *      slot_warn() - 警告级别日志
 *      slot_error() - 错误级别日志
 *
 * 作者:红模仿
 * 联系方式:QQ21497936
 * 博客地址:https://blog.youkuaiyun.com/qq21497936
 *      日期          版本号        描述
 *  2019年04月09日    v1.0.0     基础日志模块
\************************************************************/


class Log : public QObject
{
    Q_OBJECT
public:
    explicit Log(QObject *parent = nullptr);

signals:

public slots:
    static Log * instance();

public slots:
    void init(QString configFilePath);

public slots:
    void debug(QString msg);
    void info(QString msg);
    void warn(QString msg);
    void error(QString msg);

private:
    static Log *_pInstance;
    static QMutex _mutex;
    static Log4Qt::Logger * _pLoggerDebug;
    static Log4Qt::Logger * _pLoggerInfo;
    static Log4Qt::Logger * _pLoggerWarn;
    static Log4Qt::Logger * _pLoggerError;
    static QString _configFilePath;

};

log.cpp

#include "log.h"
#include "log4qt/log4qt.h"
#include "log4qt/propertyconfigurator.h"

Log * Log::_pInstance = 0;
QMutex Log::_mutex;
Log4Qt::Logger * Log::_pLoggerDebug = 0;
Log4Qt::Logger * Log::_pLoggerInfo = 0;
Log4Qt::Logger * Log::_pLoggerWarn = 0;
Log4Qt::Logger * Log::_pLoggerError = 0;
QString Log::_configFilePath;

Log::Log(QObject *parent) : QObject(parent)
{
    // 一定要配置文件,不然运行起来会直接当掉
    Log4Qt::BasicConfigurator::configure();
}

Log *Log::instance()
{
    if(!_pInstance)
    {
        QMutexLocker mutexLocker(&_mutex);
        if(!_pInstance)
        {
            Log *pInstance = new Log();
            _pInstance = pInstance;
        }
    }
    return _pInstance;
}

void Log::init(QString configFilePath)
{
    _configFilePath = configFilePath;
     Log4Qt::PropertyConfigurator::configure(_configFilePath);
    _pLoggerDebug = Log4Qt::Logger::logger("debug");
    _pLoggerInfo = Log4Qt::Logger::logger("info");
    _pLoggerWarn = Log4Qt::Logger::logger("warn");
    _pLoggerError = Log4Qt::Logger::logger("error");
}

void Log::debug(QString msg)
{
    _pLoggerDebug->debug(msg);
}

void Log::info(QString msg)
{
    _pLoggerInfo->info(msg);
}

void Log::warn(QString msg)
{
    _pLoggerWarn->warn(msg);
}

void Log::error(QString msg)
{
    _pLoggerError->error(msg);
}

5. 配置文件

在build目录下创建etc文件夹, 新建log.conf

log.conf

log4j.logger.debug=CONSOLE,debug
log4j.appender.debug=org.apache.log4j.RollingFileAppender
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.appendFile=true
log4j.appender.debug.Encoding=UTF-8
log4j.appender.debug.File=log/debug.txt
log4j.appender.debug.MaxFileSize=4096KB
log4j.appender.debug.MaxBackupIndex=7
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n
 
log4j.logger.info=CONSOLE,info
log4j.appender.info=org.apache.log4j.RollingFileAppender
log4j.appender.info.Threshold=DEBUG
log4j.appender.info.appendFile=true
log4j.appender.info.Encoding=UTF-8
log4j.appender.info.File=log/info.txt
log4j.appender.info.MaxFileSize=4096KB
log4j.appender.info.MaxBackupIndex=7
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n
 
log4j.logger.warn=CONSOLE,warn
log4j.appender.warn=org.apache.log4j.RollingFileAppender
log4j.appender.warn.Threshold=DEBUG
log4j.appender.warn.appendFile=true
log4j.appender.warn.Encoding=GBK
log4j.appender.warn.File=log/warn.txt
log4j.appender.warn.MaxFileSize=4096KB
log4j.appender.warn.MaxBackupIndex=2
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n
 
 
log4j.logger.error=CONSOLE,error
log4j.appender.error=org.apache.log4j.RollingFileAppender
log4j.appender.error.Threshold=DEBUG
log4j.appender.error.appendFile=true
log4j.appender.error.Encoding=UTF-8
log4j.appender.error.File=log/error.txt
log4j.appender.error.MaxFileSize=4096KB
log4j.appender.error.MaxBackupIndex=2
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz}[%t][%p] %m%n
 

 

Qt教程(1) : 用Log4Qt自定义日志系统 ​日志系统可以记录软件系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件和异常。在程序调试过程中,需要通过日志来找出问题所在。 使用一个好的日志框架可以事半功倍,C++的日志框架有很多,常用的框架如下: log4cxx:Java 社区著名的 Log4j 的 C++ 移植版,用于为 C++ 程序提供日志功能,以便开发者对目标程序进行调试和审计。 log4cplus:一个简单易用的 C++ 日志记录 API,它提供了对日志管理和配置的线程安全、灵活和任意粒度控制(... 阅读详情

相关推荐

Log4Qt:高效的Qt日志记录框架

丰富的日志格式:Log4Qt提供了丰富的的日志格式:Log4Qt提供了丰富的日志格式选项,开发人员可以自定义日志消息的格式,包括日期的日志格式:Log4Qt提供了丰富的日志格式选项,开发人员可以自定义日志消息的格式,包括日期、时间、线程ID、日志级别和消息内容等。灵活的日志级别:Log4Qt支持不同的日志级别,包括调试、信息、警告、错误和严重错误。4.的日志格式:Log4Qt提供了丰富的日志格式选项,开发人员可以自定义日志消息的格式,包括日期、时间、线程ID、日志级别和消息内容等。

HackLogic的博客 924

log4qt

12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了 一、为啥要使用第三方Log库,而不用平台自带的Log库 二、Log4j系列库的功能介绍与基本概念 三、Log4Qt库的基本介绍 四、将Log4qt组装成为一个单独模块 五、使用配置文件的方式配置Log4Qt 六、使用代码的方式配置Log4Qt 七、在Qt工程中引入Log4Qt库模块的方法 八、获取示例中的源代码 一、为啥要使用第三方Log库,而不用平台自带的Log库 首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但

qq_39680836的博客 1617

使用环境变量配置 Log4Qt

在使用 Log4Qt 进行日志记录时,可以通过环境变量来配置它,以便在不修改代码的情况下更改日志记录行为。总结一下,通过使用环境变量配置 Log4Qt,我们可以在不修改代码的情况下更改日志记录的行为。这种灵活的配置方式使得在不同的环境中轻松地调整日志记录的设置,以适应不同的需求。除了上述示例中的环境变量,Log4Qt 还提供了其他一些环境变量,用于更细粒度地控制日志记录的行为。可以在启动应用程序之前设置环境变量,也可以在运行时通过操作系统的环境变量设置工具进行设置。:设置日志输出文件的路径。

2301_79366106的博客 168

log4Qt史上最详细介绍、编译和使用

Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C ++端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为 Log4Qt的直接资料太少了)。Log4Qt主要是用来记录日志(有助于程序调试)。1、Logger提供日志记录服务,可以有多个Logger存在,每个有它们自己的名字。

波风水门 8980

Log4Qt 初始化过程

Log4Qt 是一个基于 Qt 框架的成熟的日志记录库,它允许开发人员在他们的 Qt 应用程序中实现灵活和高效的日志记录。在使用 Log4Qt 进行日志记录之前,需要进行初始化设置以确定日志记录器的行为和输出目标。通过以上步骤,可以在 Qt 应用程序中使用 Log4Qt 进行灵活和高效的日志记录。根据实际需求,可以进一步配置日志记录器的属性和输出目标,以满足特定的日志记录需求。日志记录器是 Log4Qt 中最重要的类之一,它负责实际的日志记录操作。完成以上步骤后,可以开始使用日志记录器记录日志消息。

FucMobile的博客 88

Log4Qt的初始化流程

在Log4Qt中,每个日志记录器都有一个唯一的名称,并且可以有多个父级,形成一个树形结构。通过Logger对象,我们可以记录日志并将其发送到相应的输出目标。Log4Qt是一个优秀的Qt日志库,支持不同的输出目标,如控制台和文件。在初始化过程中,我们需要根据配置文件中定义的目标类型来创建相应的Appender对象。在完成Logger和Appender的创建之后,我们需要启用Log4Qt的日志系统,以便记录和输出日志信息。这样,我们就完成了Log4Qt的初始化过程,并可以开始记录和输出日志信息了。

TechRoarX的博客 132

log4qt库的使用

log4qt库的使用

敖丙007的博客 3743

QT添加操作日志记录

QT框架开发,添加操作日志记录,本地生成txt文件记录内容,在需要记录的地方使用qDebug记录

qt 添加日志(Log4Qt)

1、下载Log4Qt 源码:https://sourceforge.net/projects/log4qt/ 2、添加到工程: 3、创建一个继承QObject的单列,关键步骤是在一个名字为 LOG4QT_DECLARE_QCLASS_LOGGER的宏,这样才可以使用log4qt 否则不可使用 ,在构造函数里面加载log4qt的配置文件log4qt.conf *******************************qlog.h***********************************.

MangoKing 1623

PyTorch复现PSMNet踩坑全记录:从环境配置到KITTI数据集训练

本文详细记录了使用PyTorch复现CVPR经典立体匹配模型PSMNet的全过程,从环境配置到KITTI数据集训练,特别针对2023年主流软硬件环境中的常见问题提供解决方案。文章重点介绍了PSMNet的金字塔池化模块和堆叠沙漏结构,帮助研究者和工程师快速实现工业级深度估计,节省大量试错时间。

weixin_30897233的博客 328

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。将Apache Ignite集成到Spring Boot应用中,可以显著提高应用的性能和可扩展性。Spring Boot的简单配置和Ignite的强大功能相结合,使得开发和部署更加高效。首先,创建一个新的Spring Boot项目。可以通过Spring Initializr(https://start.spring.io/)

九天的专栏 2142

使用log4qt在qt项目中记录日志

log4qt是Apache Log4j项目用于Qt框架的C++移植版本。单一开发者,年初发布0.2版本。 和其他系log4*不同,log4qt默认静态编译进目标程序。 使用: 1. 解压log4qt到目标文件夹,如D:\Qt\下; 2. qt项目的pro文件中加入一行:include(D:\Qt\log4qt\src\log4qt\log4qt.pri)     ;pri文件会将需要

aaqqxx1910的专栏 2397

泛微OA E9文档管理优化:临时文件清理与存储配置指南

本文深入解析了泛微OA E9系统性能下降的常见原因——临时文件堆积,并提供了完整的优化配置指南。文章详细介绍了临时文件的产生机制,并手把手指导管理员如何通过修改存储路径、调整保留时间、设置白名单等关键配置,有效清理与管理系统临时文件,从而释放存储空间,提升系统运行效率与稳定性。

tree8的博客 429

Log4Qt 使用教程

Log4Qt 是 Apache Log4j 的 Qt 移植版,主要用于在 Qt 框架下进行日志记录。它提供了与 Log4j 相似的功能和配置方式,适用于开源和商业 Qt 项目。Log4Qt 包含三个主要组件:Logger、Appender 和 Layout。Logger 负责记录日志,Appender 定义日志的输出目的地,如控制台、文件或数据库,Layout 则控制日志的输出格式。 ## 项目

gitblog_00379的博客 1043

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 466

Android Framework 开发工程师职位深度解析与面试指南

摘要:博泰车联网科技(上海)股份有限公司招聘Android Framework开发工程师,负责车载系统的底层开发与优化。岗位要求5年以上经验,深入掌握Android Framework机制(WindowManager、PowerManager等模块),熟悉高通平台中间件架构及NDK/JNI开发,具备性能优化(启动时间、ANR处理)、OTA升级等能力。需熟练使用Android Studio、Git等工具,有车载开发经验者优先。工作内容包括Framework定制开发、问题排查及技术文档编写。

郑伟强dev的专栏 551

qt log4qt 输出到oracle,Log4Qt 输出地

简述Log4Qt 支持自定义输出,格式化由 Layout 完成,输出地则由 Appender 控制。Appender 表示将日志输出到什么地方,常见的 Appender 有 Console(控制台)、File(文件)等等。继承关系图Log4Qt::Appender 继承关系图: 在该层次结构中,顶级类是 Appender,它是 Log4Qt API 中所有其他输出地的基类。AppenderSkel...

weixin_31704137的博客 409

windows搭建IIS(FTP)

适用于参加网络系统管理的学生进行学习与参考

a1119619789的博客 280

Qt日志库Log4Qt使用教程资源文件

Qt日志库Log4Qt使用教程资源文件 去发现同类优质开源项目:https://gitcode.com/ 此压缩文件qt-logger.rar包含了Qt日志库Log4Qt的使用示例及相关文档。Log4Qt是一个强大的日志库,能够帮助开发者轻松实现日志记录功能,支持按文件名、行号以及函数名打印输出日志信息,从而便于项目的调试与维护。 文件内容 示例代码:展示如何在Qt项目中集成并使用Log4Qt日...

gitblog_06792的博客 505

二极管限幅电路和钳位电路

二极管限幅电路和钳位电路学习

HW-BASE的博客 928

ccSwitch 安装使用指南,claude code的最佳搭档

ccSwitch 是一款真正为 AI 编程开发者打造的效率工具。它把原本繁琐的配置管理工作,简化成了直观的图形界面操作。无论你是需要在多个 API 提供商之间切换,还是想要统一管理多款 AI 编程工具,ccSwitch 都能帮你大幅提升效率。如果你是重度 AI 编程工具用户,强烈推荐尝试一下 ccSwitch,相信它会成为你开发工具箱中不可或缺的一员。项目地址。

篮球界最会写bug的人;程序猿中打球最菜的人。 1286

Log4Qt介绍

Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C ++端口。它旨在供开源和商业Qt项目使用。 1、下载源码、将源码放在你所需要的项目中。 include($$PWD/src/log4qt/log4qt.pri) 源码地址:https://sourceforge.net/projects/log4qt/ 2、封装日志类 封装成独立的日志类,这样不论用什么日志系统只需要改变该类,代码...

lqianq86的博客 825

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Log4Qt创建每日滚动日志

Log4Qt创建每日滚动日志1.代码如下:QString path=FIX_DIR+QDate::currentDate().toString("yyyyMMdd"); FileUtility::mkpath(path); //创建目录 log = Log4Qt::Logger::rootLogger(); //控制日志文本格式 PatternLayout *lay=new Pattern

BetterWorld的专栏 2529

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Qt5 版本 Log4Qt 资源文件下载

Qt5 版本 Log4Qt 资源文件下载 【下载地址】Qt5版本Log4Qt资源文件下载 本仓库提供了一个适用于 Qt5 版本的 Log4Qt 资源文件的下载。Log4Qt 是一个功能强大的日志库,专为 Qt 应用程序设计,能够帮助开发者轻松实现日志记录功能 ...

gitblog_09792的博客 341

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

qt初入门9:qt记录日志的方式,日志库了解练习(qInstallMessageHandler,qslog, log4qt)

初次接触qt相关的日志库,有需要用一个qt的日志库,就瞎折腾。最终发现,好像最基本的是最合理的,直接用log4qt在cpp中LOG4QT_DECLARE_STATIC_LOGGER静态定义最方便吧,结合配置文件也能满足需求。最终感觉,直接用log4qt应该完全能满足需求,日志文件中也能定制自己需要的布局,也支持多线程等。啥也不是,先操作后再思考吧。

yun6853992的博客 3794

Log4Qt简易使用说明

编译 从网上下载Log4Qt源码 使用QtVisualStudioTools工具导入Vs项目中 修改相关配置,生成静态库 使用 这边进行了二次封装 #pragma once #include "log4qt/log4qt.h" #include "log4qt/logmanager.h" #include "log4qt/propertyconfigurator.h" #include "libpublic.h" class CMyLog4Qt { public: //**********

我不是码农的博客~~~ 677
上一篇: WPF调用带界面Qt Dll
下一篇: Qt qInstallMessageHandler 安装消息句柄实现简单日志功能
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值