问题描述

项目开始时,只使用QDebug将调试信息打印到终端上。后期添加了日志管理系统,比如log4cplus。如何在不修改打印语句,比如还使用qDebug,就能将日志打印到文件中。

解决方法

使用qInstallMessageHandler将调试消息重定向功能,在注册的messageHandler函数中,加入日志系统的接口。简单两步就能实现

步骤

1、实现QtMessageHandler函数

void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{//调用日志系统接口switch(type){case QtDebugMsg:LOG4CPLUS_DEBUG(Logger::getRoot(), LOG4CPLUS_TEXT(msg))break;case QtInfoMsg:LOG4CPLUS_INFO(Logger::getRoot(), LOG4CPLUS_TEXT(msg))case QtWarningMsg:LOG4CPLUS_WARN(Logger::getRoot(), LOG4CPLUS_TEXT(msg))break;case QtCriticalMsg:LOG4CPLUS_ERROR(Logger::getRoot(), LOG4CPLUS_TEXT(msg))break;default:break;}
}

2、在main中注册QtMessageHandle消息处理函数
qInstallMessageHandler(messageHandler);
qSetMessagePattern("%{type}<%{time}>[%{file}:%{line}]%{message}"); //设置打印格式,参见https://doc.qt.io/qt-5/qtglobal.html#qSetMessagePattern

【Qt】QDebug和log4cplus的联合使用相关推荐

  1. QT QDebug如何一次性打印结构体的数据

    在QT环境,我们使用QDebug进行调试输出时,如果遇到需要整个结构体的内容,可以考虑在结构体中定义一个友元函数,重载QDebug的输出操作符<<,便可以使用QDebug输出结构体的数据. ...

  2. QT qDebug打印

    QT 命令行窗口16进制显示 QString Str; qDebug() << Str.sprintf("result%d,0x%02x\n", j, tmp); qD ...

  3. QT qDebug的用法

    qDebug用于在控制台输出调试信息,主要有以下几种用法. 1.类似c++的cout函数 QString str="world"; qDebug()<<"he ...

  4. Qt的qDebug使用

    Qt的qDebug使用 使用 " qDebug() << "一定要添加头文件 #include 然而 int num = 20;char str[20]="h ...

  5. 【Qt】QSharedMemory类详解

    00. 目录 文章目录 00. 目录 01. 概述 02. 公有类型 03. 成员方法 04. 程序示例一 05. 程序示例二 06. 源码下载 07. 附录 01. 概述 QSharedMemory ...

  6. Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework

    Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework 该文章是一篇说明c++/Qt调用 ...

  7. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  8. 《音频、图像及视频技术》学习笔记

    秒懂音视频开发学习笔记 01_移动通信技术的发展 02_重识图片 03_Windows开发环境搭建 04_Qt开发基础 05_重识声音 06_重识音频 07_音频录制01_命令行 08_音频录制02_ ...

  9. Windows平台调试工具:DebugView

    Windows平台调试工具:DebugView 简单介绍 使用场景 使用方法 下载地址 简单介绍 这款软件真的好用,体积又小,在Windows平台下无压力运行.只要在代码里输出调试信息,运行执行文件就 ...

最新文章

  1. ASP.NET Core 数据保护(Data Protection)【中】
  2. Liunx下的日志清理shell脚本实战之日志备份
  3. csapp:无符号数可能造成的程序bug
  4. 深入分析 Java 中的中文编码问题--转
  5. tableau certificate
  6. 精讲23种设计模式-基于责任链模式~构建企业级风控系统
  7. C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
  8. 深入理解CSS六种颜色模式
  9. Android中用文件初始化sqlite 数据库(二)
  10. Delphi 两种类的声明方法
  11. 系统计算机名是中文,导致VisualSVN安装失败
  12. 计算机c盘如何扩大,C盘太小怎么办?教你扩大容量!
  13. 量化投资03---小市值轮动因子---准备工作01
  14. iPhone设备上安装beta版本系统,在浏览器中搜索网址 beta.apple.com
  15. 计算机组成原理第七章笔记---输入输出
  16. 服务器虚拟化巡检报告,vmvare虚拟化平台巡检周报
  17. 【教程】七天入门C#上位机目录
  18. css 父级设置了padding,但是子元素还是会超过padding解决方案
  19. Android实战——jsoup实现网络爬虫,糗事百科项目的起步
  20. 《MySQL是怎么运行的》读书笔记

热门文章

  1. 【模板】树链剖分 P3384
  2. 【从零开始的ROS四轴机械臂控制】(三) - 为机械臂添加摄像头和夹爪、解决gazebo模型抖动、使用gazebo建立sdf模型
  3. CentOS需要安装的JAVA环境的相关软件
  4. Ubuntu18.04 误删/usr/bin/python3的解决方案
  5. 为方便ATS管理建立的一些命令别名
  6. 虚幻引擎4:打造街机经典游戏学习教程 Unreal Engine 4: Create an Arcade Classic
  7. Revit初学者完整指南 The Complete Revit Guide for Beginners
  8. 在3ds Max中使用V-Ray 5渲染引擎视频教程
  9. WCDMA系统中的扰码规划
  10. f-fdisk做磁盘分区,起始扇区从2048块开始