c++项目实战---->QT文件日志输出

2023-05-16

QT说明文档(输出详细日志)

  #include <qapplication.h>
  #include <stdio.h>
  #include <stdlib.h>

  void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  {
      QByteArray localMsg = msg.toLocal8Bit();
      switch (type) {
      case QtDebugMsg:
          fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtInfoMsg:
          fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtWarningMsg:
          fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtCriticalMsg:
          fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      case QtFatalMsg:
          fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
          break;
      }
  }

  int main(int argc, char **argv)
  {
      qInstallMessageHandler(myMessageOutput);
      QApplication app(argc, argv);
      ...
      return app.exec();
  }

所需头文件

// Qt 之 qInstallMessageHandler(输出详细日志)
#include <QString>
#include <QFile>
#include <QMutex>
#include <QTextStream>
#include <QDateTime>
#include <QDir>

输出日志重定向

//qInstallMessageHandler(myMessageOutput); // 调用

// 保存从文件中读取的配置信息
struct log_parameter{
    // 构造函数初始化列表
    log_parameter():
        log_folder_path("../log/Manager/"),
        max_files(24),
        min_severity_level(1)
    { }

    QString log_folder_path;
    int max_files;
    int min_severity_level;
};
static log_parameter parameter; // 全局变量

// 重定向输出至日志文件
static void myMessageOutput(QtMsgType type,const QMessageLogContext &context,const QString &msg)
{
	// 上锁
	static QMutex mutex;
    mutex.lock();

    QString text;
    switch (type) {
    case QtDebugMsg:
        text = QString("Debug:");
        break;
    case QtWarningMsg:
        text = QString("Warning:");
        break;
    case QtCriticalMsg:
        text = QString("Critial:");
        break;
    case QtInfoMsg:
        text = QString("Info:");
        break;
    case QtFatalMsg:
        text = QString("Fatal:");
        break;
    }
	
	// 设置输出信息格式
    QString context_info = QString("%1:%2 Line:(%3)")
            .arg(QString(context.file)).arg(QString(context.function)).arg(context.line);

    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ");
    QString current_date = QString("(%1)").arg(current_date_time);

    QString message = QString("%1 %2 %3 %4")
            .arg(current_date).arg(text).arg(context_info).arg(msg)

    // 输出信息至文件
    QDir dir(parameter.log_folder_path);
    if ( !dir.exists()) // 路径不存在就创建
    {
        dir.mkpath(parameter.log_folder_path); // 创建多级目录。成功返回true
    }
    QString file_name = parameter.log_folder_path + current_date_time.left(10) + ".log";
    QFile file(file_name);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Append)) // 无法写入时(只写或者追加的形式打开)
    {
        mutex.unlock();
        return;
    }
    QTextStream text_stream(&file); // 定向到日志输出到哪个文件中
    text_stream << message << "\r\n"; // message为类似 qDebug,qInfo << 形式
    
    // 用完之后擦屁股
    file.flush();
    file.close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++项目实战---->QT文件日志输出 的相关文章

  • 【项目实战】---首页一级分类的显示

    在前面的博文中 xff0c 小编主要简单的介绍了用户模块中的验证码程序是如何实现的 xff0c 今天继续来介绍我们的项目 xff0c 今天小编主要简单的介绍一下如何实现首页的一级分类的显示 xff0c 比如小伙伴现在看的CSDN xff0c
  • 【项目实战】Spring体系结构与框架图

    一 Spring 体系结构 Spring 有可能成为所有企业应用程序的一站式服务点 xff0c 然而 xff0c Spring 是模块化的 xff0c 允许你挑选和选择适用于你的模块 xff0c 不必要把剩余部分也引入 下面的部分对在 Sp
  • 一文速学-GBDT模型算法原理以及实现+Python项目实战

    目录 前言 一 GBDT算法概述 1 决策树 2 Boosting 3 梯度提升 nbsp 使用梯度上升找到最佳参数
  • C#项目实战——Windows计算器的制作【实例】

    参考 C 从入门到项目实践 边学习 边练习实现 Windows计算器的制作 此次练习的计算器应用软件在Visual Studio 2019编程环境中开发 是一个简单的窗体应用程序 实现简单的计算器功能 1 系统功能描述 Windows计算器
  • CocosCreator项目实战(13):功能-排行榜

    文章目录 一 主域设置二 子域设置三 其他相关设置 参考Cocos接入微信小游戏官方文档 xff0c 为了保护其社交关系链数据 xff0c 微信小游戏增加了开放数据域的概念 只有在开放数据域中才能访问微信提供的wx getFriendClo
  • 基于MYSQL的互联网药品交易系统数据库设计项目实战

    说明 这是一个数据库课程设计实战项目 附带代码 文档 视频讲解 如需代码 文档 视频讲解可以直接到文章最后获取 项目背景 疫情期间实体经济收到打击 实体药店经营困难 医院也面临着疫情患者的压力运转着 这种情况下更需要网上药店的存在 居民可以
  • Python项目实战 —— 05. 小红书达人大盘分析

    Python项目实战 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 一 背景 二 可视化 三 代码 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 大家可以关注知乎或微信公众号的sh
  • Spring Boot 实现用户行为记录的四种方式

    目录 一 需求背景 二 需要的pom依赖 三 AOP切面编程实现 四 Interceptor拦截器实现 五 Filter过滤器实现 六 ArgumentResolver 七 拓展部分 八 参考文献 一 需求背景 根据产品经理要求 需要对用户
  • 实时手写数字识别

    PS 好久之前的博客了 再整理百度云的时候翻到了之前的代码 贴在这里 代码 手写数字识别作为模式识别领域的一个重要问题 也有着重要的理论价值 在大数据时代的背景下 其应用领域非常之广 很多学者对手写数字识别提出了不同的算法 取得了不错的测试
  • ViewPager两种方式实现无限轮播

    给自己的忠告 虽然轮子很好用 但是使用轮子的前提是 如果不去封装一些复杂的功能 自己会用最基本的方法写一个 不然再好的轮子那也是别人的 当自己项目遇到和轮子不一样的地方 那就只能束手无策或者改人家的源码 当然能看懂轮子的封装思想自己学以致用
  • 基于跳表实现的轻量级KV存储引擎 项目总结

    参考 https github com youngyangyang04 Skiplist CPP 项目介绍 KV存储引擎 众所周知 非关系型数据库redis 以及levedb rockdb其核心存储引擎的数据结构就是跳表 本项目就是基于跳表
  • Android购物车效果实现(RecyclerView悬浮头部实现)

    刚开始看购物车效果觉得挺复杂 但是把这个功能拆开来一步一步实现会发现并不难 其实就涉及到 ItemDecoration的绘制 recyclerview的滑动监听 贝塞尔曲线和属性动画相关内容 剩下的就是RecyclerView滑动和点击时左
  • java 性能监控 jstack 线程死锁 JConsole 和 BTrace 图形化工具

    java 性能监控 工具 除了 javac java javap 之外 jdk 安装包还提供了很多其他工具 列出 bin 目录下的文件 TomChens MacBook Pro Commands tomchen ls appletviewe
  • 短信验证码

    短信验证码用的是阿里云的 目录结构如下 其中aliyunsdkdysmsapi是在官方下载的 https help aliyun com document detail 55359 html aliyun py coding utf 8 i
  • MQTT在Android端的使用详解以及MQTT服务器搭建、Paho客户端使用

    前言 最近的项目中使用了MQTT来接收后端推送过来的一些数据 这篇文章来介绍下Android端如何集成使用 关于MQTT相关介绍将不再阐述 由于光写代码不实践的接收下数据很难验证我们写的是否正确 所以我将简单介绍下如何配置个MQTT服务端
  • 数据挖掘案例实战:利用LDA主题模型提取京东评论数据(二)

    泰迪智能科技 数据挖掘平台 TipDM数据挖掘平台 最新推出的数据挖掘实战专栏 专栏将数据挖掘理论与项目案例实践相结合 可以让大家获得真实的数据挖掘学习与实践环境 更快 更好的学习数据挖掘知识与积累职业经验 专栏中每四篇文章为一个完整的数据
  • SHA-256算法实现过程

    整理一下SHA 256的实现步骤 1 定义8个32位常量 h0 0x6a09e667 h1 0xbb67ae85 h2 0x3c6ef372 h3 0xa54ff53a h4 0x510e527f h5 0x9b05688c h6 0x1f
  • node封装传formdata数据的接口(多文件上传)

    前文 这个星期的主要完成的东西我想就是多文件上传了 这也是我第一次封装传formdata数据类型的数据 因为也是刚学不久node 很多东西都是要自己摸索的 关于这个多文件上传我也是查阅了不少的博客 也是问了学长 最后问题才得以解决 关于接口
  • 数据库CPU满载如何处理

    当数据库CPU满载时 我们首先要做的是让CPU降下来 优先保证系统的可用性 什么情况会导致数据库CPU飙升呢 QPS过高 高并发 也就是数据库承载的流量过大 慢SQL 少量或大量慢SQL占用CPU资源 拖垮了数据库 这类慢sql通常表现为
  • Vue项目的部署(服务器)

    Vue项目的部署 服务器 前几天帮朋友写了一个可以动态查看地点温度的前端项目 目前已经部署上线了 访问链接点这里 服务器是朋友的 倒时候打不开会很正常 说不定又使用服务器玩大数据项目去了 效果图 图一 图二 当然 温度也都是实时跟新的 而且

随机推荐

  • HTML实现鼠标拖动元素排序

    1 简介 拖放 xff08 Drag和 drop xff09 是 HTML5 标准的组成部分 xff0c 为了使元素可拖动 xff0c 必须把 draggable 属性设置为 true xff0c 整个拖拽事件触发的顺序如下 xff1a d
  • MacOS安装svn客户端

    一 安装Homebrew环境 打开终端 输入以下命令 bin zsh c span class token string 34 span class token variable span class token variable span
  • MySql数据库root账户无法远程登陆解决办法

    最近换了新的腾讯云服务器后 xff0c 通过宝塔面板安装了mysql 数据库 xff0c 之后使用root用户通过navicat远程连接登录不了 解决办法如下 两行代码ok MySQL5 7和MySql8 开启root 用户远程访问 mys
  • MacOS修改Hosts文件

    1 苹果Mac电脑上 xff0c hosts文件的路径为 etc hosts xff0c 打开VI编辑 span class token function sudo span span class token function vim sp
  • ERD Online 4.0.0 免费私有部署方案

    文章目录 1 快速安装2 前置条件 3 一键安装 4 兼容性列表4 1 云主机兼容性列表4 2 虚拟机兼容性列表 1 快速安装 ERD Online的服务理念 xff1a 能喂到嘴里 xff0c 绝不递到手里 2 前置条件 一台至少配置为
  • mysql: error while loading shared libraries: libtinfo.so.5 解决办法

    Centos8中安装mysql8 xff0c 服务启动后 xff0c 连接服务时报错为以下错误信息 mysql error span class token keyword while span loading shared librari
  • trilead-ssh2连接不上centos服务器Caused by: java.io.IOException: Cannot negotiate, proposals do not match.

    导致此问题的原因是ssh升级后 xff0c 为了安全 xff0c 默认不在采用原来一些加密算法 xff0c 我们手工添加进去即可 1 步骤一 修改ssh的配置文件 etc ssh sshd config 搜索KexAlgorithms xf
  • macos安装nvm

    文章目录 1 概述2 安装注意事项3 安装nvm 1 概述 nvm 即 node version manager xff0c 好处是方便切换 node js 版本 2 安装注意事项 卸载从node官网下载pkg安装的nodesudo rm
  • Linux下生产者消费者问题的C语言实现

    注 xff1a 查看全文请关注作者 xff0c 或点击前往 xff1a 生产者 消费者问题的C语言实现 实验六 生产者 消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题 xff1a 生产者 消费者 xff0c 具体
  • ftpClient文件上传成功但总是返回false

    ftpClient storeFile newFileName is xff1b 文件上传成功但总是返回false flag span class token operator 61 span ftpClient span class to
  • “佛祖保佑“代码注释

    注释如下 oo0oo o8888888o 88 34 34 88 0 61 0 96 39 39 39
  • android带视频和图片的轮播(banner)解决方案

    方案只包含一个视频和多张图片 xff0c 如果又多个视频的 xff0c 可以修改适配器中的的播放器为一个list xff0c 并且在滑动中做相应的释放操作 一 xff1a 实现一个视频和多张图片的轮播banner 使用到第三方框架有 1 轮
  • Android灯光系统(硬件访问服务框架)

    Android灯光系统 硬件访问服务框架 Java类 xff1a LightsService java LightsService java通过调用 xff0c LightsService JNI来实现com android server包
  • Ubuntu16.04简易安装pycharm社区版

    1 首先到官网下载linux版本的pycharm xff0c 为了使用方便 xff0c 直接安装社区版 https www jetbrains com pycharm download section 61 linux xff08 因为虚拟
  • vue 严格格式问题

    用vue cli脚手架搭建开发环境 xff0c 会自动安装eslint严格格式 xff0c 如果代码格式不按照严格模式写 xff0c 会经常报警告 xff08 如缩进4个空格会警告 xff09 xff0c 如下图是一些警告类型 xff1a
  • vue watch深度监控一个对象下新增属性不生效问题

    先简单还原下项目中遇到的问题 xff1a adc为一个空对象 xff0c watch深度监听abc下的pageNum属性 xff08 此时还没有 xff09 data return abc watch 39 abc 39 deep true
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • 面试之Spring的启动原理

    引入 为什么突然说一下Spring启动原理呢 xff0c 因为之前面试的时候 xff0c 回答的那可谓是坑坑洼洼 xff0c 前前后后 xff0c 补补贴贴 总而言之就是不行 xff0c 再次看一下源码发掘一下 在Spring Boot还没
  • Zabbix5.0钉钉告警实战

    1 服务器环境准备 xff08 Centos7 6 xff09 1 服务器1 xff1a zabbix服务端 服务器2 xff1a 客户端 2 客户端服务器上安装agent xff0c 并且安装httpd服务 xff0c 在zabbix网页
  • c++项目实战---->QT文件日志输出

    QT说明文档 xff08 输出详细日志 xff09 span class token macro property span class token directive keyword include span span class tok