Qt 自定义 log 日志

Qt 自定义日志工具

Qt

效果图
C++ 中比较不错的日志工具有 log4cxx,log4qt 等,但是它们都不能和 qDebug(), qInfo() 等有机的结合在一起,所以在 Qt 中使用总觉得不够舒服,感谢 Qt 提供了 qInstallMessageHandler() 这个函数,使用这个函数可以安装自定义的日志输出处理函数,把日志输出到文件,控制台等,具体的使用可以查看 Qt 的帮助文档。

本文主要是介绍使用 qInstallMessageHandler() 实现一个简单的日志工具,例如调用 qDebug() << “Hi”,输出的内容会同时输出到日志文件和控制台,并且日志文件如果不是当天创建的,会使用它的创建日期备份起来,涉及到的文件有:

kcLog.pro:工程
main.cpp: 使用示例
Singleton.h: 单例模版
kcLog.h: 自定义日志相关类的头文件
kcLog.cpp: 自定义日志相关类的实现文件

工程下载地址:
https://download.youkuaiyun.com/download/sirkang/12418621

定义 QT_MESSAGELOGCONTEXT

qDebug 其实是一个宏: #define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug,在 Debug 版本的时候会输出行号,文件名,函数名等,但是在 Release 版本的时候不会输出,为了输出它们,需要在 .pro 文件里加入下面的定义:

DEFINES += QT_MESSAGELOGCONTEXT

kcLog.pro

QT -= core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11
#打印日志方式
CONFIG += console

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_MESSAGELOGCONTEXT

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        kcLog.cpp \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

HEADERS += \
    Singleton.h \
    kcLog.h

main.cpp

#include <QApplication>
#include <QDebug>
#include "kcLog.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    //安装消息处理函数
    Singleton<kcLog>::getInstance().installMessageHandler();
    //输出测试,查看是否写入到文件(写入)

    qDebug("qDebug:安装消息处理函数,写入到文件!");
    qInfo("qInfo:安装消息处理函数,写入到文件!");
    qWarning("qWarning:安装消息处理函数,写入到文件!");
    qCritical("qCritical:安装消息处理函数,写入到文件!");
    //    qFatal("qFatal:安装消息处理函数,写入到文件!");  // 写入该行直接致命错误!,以下代码不执
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值