Qt qInstallMessageHandler 安装消息句柄实现简单日志功能
阅读原文时间:2021年04月23日阅读:1

0. 前言

自带的日志, 还是很好用的, 支持四种输出, 代码量很少, 一个函数

1. 实现效果

日志记录的很详细, 有消息内容, 文件路径, 代码行数, 函数, 日期

可以说很全面了, 相比较log4qt略显臃肿, 这个就轻便很多

2. 目录结构

只有main函数

3. 源码编译

main.cpp

#include <QCoreApplication>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QtMsgHandler>
#include <QtDebug>
#include <QMutex>
#include <QDateTime>
#include <stdio.h>
#include <stdlib.h>

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    // 加锁
    static QMutex mutex;
    mutex.lock();

    QByteArray localMsg = msg.toLocal8Bit();

    QString strMsg("");
    switch(type)
    {
    case QtDebugMsg:
        strMsg = QString("Debug:");
        break;
    case QtWarningMsg:
        strMsg = QString("Warning:");
        break;
    case QtCriticalMsg:
        strMsg = QString("Critical:");
        break;
    case QtFatalMsg:
        strMsg = QString("Fatal:");
        break;
    case QtInfoMsg:
        strMsg = QString("Info:");
        break;
    }

    // 设置输出信息格式
    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
    QString strMessage = QString("\n[%5] %1 \nFile: %2  \nLine: %3  \nFunction: %4")
            .arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function).arg(strDateTime);

    // 输出信息至文件中(读写、追加形式)
    QFile file("log.txt");
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream << strMessage << "\r\n";
    file.flush();
    file.close();

    // 解锁
    mutex.unlock();
}

int main(int argc, char *argv[])
{
    qInstallMessageHandler(myMessageOutput);

    QCoreApplication a(argc, argv);

    qDebug("This is a debug message");
    qWarning("This is a warning message");
    qCritical("This is a critical message");
//    qFatal("This is a fatal message");
    qInfo("This is a info message");

    return a.exec();
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章