首页 > 其他分享 >Qt打印日志

Qt打印日志

时间:2024-10-14 17:50:48浏览次数:8  
标签:case Qt 打印 strMsg QString file arg 日志 include

不使用第三方库,直接使用Qt实现日志打印,demo下载

#include "QtLog.h"
#include <QtWidgets/QApplication>
#include <QMutex>
#include <QFile>
#include <QDir>
#include <QDateTime>
#include <QCoreApplication>
#include <QApplication>

#define LOG_MAX_SIZE 5*1024*1024
#define LOG_DIR_NAME "mylog"

QString getLogPath()
{
    return QString("./%1").arg(LOG_DIR_NAME);
}

QString getLogFileName()
{
    return QString("%1/log%2.txt").arg(LOG_DIR_NAME).arg(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
}

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

    QByteArray localMsg = msg.toUtf8();

    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;
    default:
        return;
    }

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


    // 输出信息至文件中(读写、追加形式)
    // 使用 static 只需要
    static QFile file(getLogFileName());
    if (!file.isOpen()) {
        file.open(QIODevice::ReadWrite | QIODevice::Append);
    }
    if (file.size() > LOG_MAX_SIZE)
    {
        file.close();
        file.setFileName(getLogFileName());
        file.open(QIODevice::ReadWrite | QIODevice::Append);
    }

    QTextStream stream(&file);
    stream << strMessage << "\r\n";
    file.flush();

    // 取消 close
    //    file.close();

    // 解锁
    mutex.unlock();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //日志
    QDir dir;
    if (!dir.exists(getLogPath()))
    {
        dir.mkdir(getLogPath());
    }
    qInstallMessageHandler(myMessageOutput);
    qDebug() << "test debug log";
    qInfo() << "test info log";
    qWarning() << "test warning log";
    qCritical() << "test critical log";
    QtLog w;
    w.show();
    return a.exec();
}

标签:case,Qt,打印,strMsg,QString,file,arg,日志,include
From: https://blog.csdn.net/YIRILIANG/article/details/142925007

相关文章

  • [笔记] 使用注解切面(AOP)实现操作日志和数据日志记录
    前言只是一个笔记,肯定有不足的地方,麻烦指出来一起进步.因为是多模块的内部项目,所以不会有高并发.所以是在一个线程内进行的一.枚举操作状态/***操作状态*/publicenumBusinessStatus{/***成功*/SUCCESS,/***失败*......
  • Qt/C++编写的mqtt调试助手使用说明
    一、使用说明第一步,选择协议前缀,可选mqtt://、mqtts://、ws://、wss://四种,带s结尾的是走ssl通信,ws表示走websocket通信。一般选默认的mqtt://就好。第二步,填写服务所在主机地址,可以是IP地址也可以是网址,只要真实存在的就行。第三步,填写通信所用端口号,mqtt默认端口号是1883,以......
  • 【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式
    效果示例思维导图目录1,基本使用1,依赖下载2,页面导入3,修改字体大小(可行但不推荐)2,自定义样式,字体大小1,修改字体大小(推荐)2,自定义样式3,封装共享样式3,去除页面页脚内容4,测试案例demo,直接cv可用5,print-js的其他参数说明1,基本使用1,依......
  • qt 信号和槽
    第五个参数一般使用默认,不需特别指明第五个参数Qt::ConnectionTypeQt::ConnectionType是一个枚举类型,用于指定连接的类型。以下是Qt::ConnectionType枚举的各个值及其含义:Qt::AutoConnection(默认值):如果发送者和接收者在同一个线程中,则使用Qt::DirectConnection。如果......
  • MQTT协议
    MQTT与HTTP协议的区别:MQTT以数据为中心,而HTTP是以文档为中心的。HTTP是用于客户端-服务器计算的请求-响应协议,并不总是针对移动设备进行优化。MQTT在这些术语中的主要优点是轻量级(MQTT将数据作为字节数组传输)和发布订阅模型,这使其非常适合资源受限的设备并有助于节省带宽。......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • 基于YOLOv8的道路缺陷检测系统设计(代码+教程+pyqt)
    路面裂缝检测是计算机视觉在基础设施维护中的一个重要应用。使用YOLOv8进行路面裂缝检测的过程与绝缘子检测类似,包括数据准备、模型训练和部署。下面是一个详细的流程,包括代码示例。YOLOv8是YouOnlyLookOnce(YOLO)系列目标检测算法的最新版本,它以其快速和准确的目标......
  • QT实现校园导航
    //MainWidget.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include"mapwidget.h"#include<QToolButton>#include<QGraphicsLineItem>#include<QGraphicsScene>#include<QGraphicsView>#includ......
  • 【Python开发技术之PyQt5精品教学】第36课--PyQt5 拖放功能
    PyQt5拖放功能拖放功能对用户来说非常直观。它被应用于许多桌面应用程序,用户可以将对象从一个窗口复制或移动到另一个窗口。基于MIME的拖放数据传输是基于QDrag类实现的。QMimeData对象将数据与对应的MIME类型关联起来。数据被存储在剪贴板中,然后在拖放过程中使用。以下QMi......