当前位置: 首页 > news >正文

Qt自带的日志重定向机制

//Qt5开始提供了日志上下文信息输出,比如输出当前打印消息所在的代码文件、行号、函数名等。
//如果是release还需要在pro中加上 DEFINES += QT_MESSAGELOGCONTEXT 才能输出上下文,默认release关闭的。
//切记不要在日志钩子函数中再写qdebug之类的,那样就死循环了。
//日志重定向一般就三种处理
//1: 输出到日志文件比如txt文本文件。
//2: 存储到数据库,可以分类存储,以便相关人员查询分析。
//3: 重定向到网络,对方用小工具连接程序后,所有打印信息通过tcp发过去。//日志重定向
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
void Log(QtMsgType type, const QMessageLogContext &context, const QString &msg)
#else
void Log(QtMsgType type, const char *msg)
#endif
{//加锁,防止多线程中qdebug太频繁导致崩溃static QMutex mutex;QMutexLocker locker(&mutex);QString content;//这里可以根据不同的类型加上不同的头部用于区分switch (type) {case QtDebugMsg:content = QString("%1").arg(msg);break;case QtWarningMsg:content = QString("%1").arg(msg);break;case QtCriticalMsg:content = QString("%1").arg(msg);break;case QtFatalMsg:content = QString("%1").arg(msg);break;}//加上打印代码所在代码文件、行号、函数名
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))if (SaveLog::Instance()->getUseContext()) {int line = context.line;QString file = context.file;QString function = context.function;if (line > 0) {content = QString("行号: %1  文件: %2  函数: %3\n%4").arg(line).arg(file).arg(function).arg(content);}}
#endif//将内容传给函数进行处理SaveLog::Instance()->save(content);
}//安装日志钩子,输出调试信息到文件,便于调试
void SaveLog::start()
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))qInstallMessageHandler(Log);
#elseqInstallMsgHandler(Log);
#endif
}//卸载日志钩子
void SaveLog::stop()
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))qInstallMessageHandler(0);
#elseqInstallMsgHandler(0);
#endif
}

推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

http://www.lryc.cn/news/187517.html

相关文章:

  • 笔记36:CNN的多通道卷积到底是什么样的
  • 【eigen】解决报错 return type of RCmpEQReturnType Eigen::operator== is not ‘bool’
  • QT 实现mysql的长连接
  • Vue 使用 setup 语法糖
  • Feign(替代RestTemplate)远程调用
  • 查找算法 —— 斐波拉契查找法
  • PL/SQL全量同步
  • IO类型游戏研发定制开发
  • Eclipse iceoryx(千字自传)
  • 竞赛 深度学习 opencv python 公式识别(图像识别 机器视觉)
  • Pikachu靶场——跨站请求伪造(CSRF)
  • 软件测试简历项目经验怎么写?大厂面试手拿把掐
  • 图像处理与计算机视觉--第七章-神经网络-单层感知器
  • pyserial,win11,串口总是被占用
  • 网站上线如何检查?
  • 如何理解pytorch中的“with torch.no_grad()”?
  • Linux虚拟机克隆之后使用ip addr无法获取ip地址
  • 日报系统:优化能源行业管理与决策的利器
  • linux安装idea
  • vue启动项目,npm run dev出现error:0308010C:digital envelope routines::unsupported
  • vue-devtools插件安装
  • const关键字
  • HTML5+CSS3+JS小实例:仿优酷视频轮播图
  • dart的Websocket为什么找不到onOpen方法?
  • VMware中Ubuntu(Linux)无法连接网络解决办法记录
  • js结合map对象等处理数组
  • 网络攻防实战演练
  • 基于Keil a51汇编 —— 标准宏定义
  • 遍历List集合
  • k8s containerd查看镜像