qt项目中输出日志

此日志是在主线程中实现输出信息,可能对于比较多的线程的项目,不是一个很好的选择。下面记录一下。
首先创建一个头文件log.hpp,也可直接创建成log.h,本人是由于创建前打算在其中定义函数,后又没有定义,也没有再删除后重新创建,就在这个文件中写了。
log.hpp

#ifndef LOG_H
#define LOG_H#include <QCoreApplication>
#include <QDebug>#define OUTPUT_LOG //输出信息输出到输出控制台还是日志,注释掉——release下不能生成日志,在debug版在输出信息栏输出信息,放开——release下生成日志#ifdef  OUTPUT_LOG
#define  outPut  qOut//release版
#else
#define  outPut  qDebug()//debug版
#endif//日志文件名称
#define LOG_FILE     QCoreApplication::applicationDirPath()/*strFilePath*/ + "/logger.txt"
#define qOut qDebug()<<__FUNCTION__<<"["<<__LINE__<<"]"
#define xErrPrint  qCritical()<<__FUNCTION__<<"["<<__LINE__<<"]"#endif // LOG_H

上述文件中掺杂着可以实现在debug线能够输出打印信息,release下在日志文件中输出打印信息的代码段。在下一篇博文中将会做讲解。
编写完log.hpp后,在main.cpp中添加如下代码:

#include "maindialog.h"#include <QApplication>
#include <QFile>
#include "log.hpp"
#include <QMutex>
#include <QDateTime>void MessageTypePut(QtMsgType type, const QMessageLogContext &context, const QString &msg);int main(int argc, char *argv[])
{
#ifdef OUTPUT_LOGqInstallMessageHandler(MessageTypePut);
#endifQApplication a(argc, argv);MainDialog w;w.show();return a.exec();
}void MessageTypePut(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("Critical:");break;case QtFatalMsg:text = QString("Fatal:");break;default:break;}//日志写到文件QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");QString message = QString("%1 %2%3").arg(current_date_time).arg(text).arg(msg);QFile file(LOG_FILE);file.open(QIODevice::WriteOnly | QIODevice::Append);QTextStream text_stream(&file);text_stream << message << "\r\n";file.flush();//将缓冲的数据刷新到文件file.close();mutex.unlock();
}

将main.cpp添加完部分代码后是上面所贴代码的样子。
使用的时候采用如下的方法:

#include "log.hpp" //包含头文件log.hppoutPut<<"创建界面失败!";//输出采用outPut<<
outPut<<"m_info = "<<m_info.rect.x;

和qDebug()的输出相似。其中#define OUTPUT_LOG被注释掉之后只能在debug模式下向应用程序输出栏输出信息,放开#define OUTPUT_LOG的注释,可以在release模式下在可执行文件所在目录生成日志文件,内包含输出信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins_GithubFork程序_入门试炼04

部署应用介绍与前期准备&#xff1a; 本章讲解Fork github上的应用、部署应用下载、简略分析部署应用、 数据库准备、本地运行部署应用、将更新后的代码上传到github。 一、Github的介绍 GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持git 作为唯一的版…

输出日志的开关控制

在项目中想使日志作为程序异常时的参考&#xff0c;又不想使输出日志过久过长导致程序的性能下降。此时可以选择行的来控制日志是否输出。比如前期不让日志输出&#xff0c;整体运行程序&#xff0c;测试程序的内存增涨&#xff0c;此时将日志关闭。这个博客就可以帮助实现这样…

用Jenkins自动化搭建测试环境_入门试炼05

Jenkins自动化部署任务开发&#xff1a; 本章简述自动化构建、部署过程、 创建Jenkins 任务&#xff0c;填写部署代码、实际运行部署任务。 一、部署过程介绍 简述自动化部署过程&#xff1a; 【开始】-【Git同步最新代码】-【maven打包编译】-【停止Tomcat】-【部署应用】-【…

关于指针的小领悟

从点滴做起&#xff0c;积累酿造终成硕果。 今天这篇文章只适合初学的小白&#xff0c;主要以指针的谁开辟谁释放为题&#xff0c;举一个个例子。 涉及的代码部分&#xff1a; config new Config();QString strIp config->Get("server","url").toByte…

OpenGL ES OpenGL WebGL EGL WGL 区别

目录 一.OpenGL二.OpenGL ES三.WebGL 四.EGL 和 WGL 五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学…

用Jenkins自动化搭建测试环境_入门试炼06

本章研发修改程序代码、 运行Jenkins环境发布任务、新环境上验证研发更改。 实战 1. 修改部署应用源代码2. commit修改内容&#xff0c;push代码到github3.执行Jenkins自动化部署任务4. 待任务完成后&#xff0c;打开浏览器查看部署结果 【从修改代码】-到【推送git库】-再到…

为什么给黑洞拍照需要这么长时间?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;中国科普博览&#xff1b;左文文&#xff08;中科院上海天文台&#…

静态成员函数与静态成员变量

此文针对于初学者或者对这一部分掌握不太清楚的人。 首先静态成员函数的声明&#xff1a; static void setName(QString name);需要在函数的声明前加static关键字。 定义的时候和普通成员函数一样&#xff0c;不需要加static&#xff0c;但是静态成员函数只能访问静态成员变量…

OpenGL ES freeglut 下载和使用

目录 一.freeglut 简介二.freeglut 下载五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

使用Jenkins搭建自动化测试环境_环境准备_入门试炼01

平台介绍&#xff1a; 前置准备环境&#xff1a;数据库MySQL&#xff0c;测试环境OS CentOS。 文章目录1. 平台介绍2. 自动化测试环境部署带来的幸福感:2.1. 程序自动部署&#xff0c;节约时间2.2. 环境一键部署&#xff0c;不怕研发频繁修改代码1. 平台介绍 2. 自动化测试环境…

与云原生及开源大神们的第二次亲密接触 | 全议程重磅发布

戳蓝字“CSDN云计算”关注我们哦&#xff01;CNCF主办的中国最大规模开源与云原生大会有来自阿里巴巴、百度、华为、腾讯和雅虎日本的演讲嘉宾&#xff0c;加上Linux基金会的Open Source Summit。加利福尼亚州旧金山&#xff0c;2019年4月10日 —— 云原生计算基金会&#xff0…

初始化成员列表

下面只简单说明一下初始化成员列表的使用&#xff1a; 对于普通成员变量可以使用成员初始化列表进行初始化&#xff0c;也可以不使用成员列表初始化&#xff0c;成员变量的初始化顺序只与声明的顺序有关&#xff0c;与初始化列表的顺序无关。 对于const成员变量&#xff0c;其初…

OpenGL ES glew 下载和使用

目录 一.glew 简介二.glew 下载五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> Op…

SonarQube上传分析报告失败

问题描述: 使用Maven与SonarQube进行代码分析&#xff0c;完成分析后无法正常上传分析报告 [ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar (default-cli) on project qishi: Error 500 on http://sonar/api/ce/submit?pr…

Storm精华问答 | 遇到这些错误日志该如何解决?

分布式的实时计算系统&#xff0c;能够可信任的处理大量的流式数据&#xff0c;就好比Hadoop对于批量数据进行的处理一样&#xff1b;通常来说&#xff0c;Hadoop能够进行大批量数据的离线处理&#xff0c;但是在实时计算上的表现实在是不尽如人意&#xff1b;而Storm就可以担当…

const成员函数

不论是类中对于const成员函数的声明还是在类外对于成员函数的声明其方式是一样的&#xff0c;如下&#xff1a; void getName() const;在函数声明的未部添加const关键字&#xff0c;表明函数不能修改其内部的成员变量的值。 如果是在类中定义const成员函数&#xff0c;那么其声…

OpenGL ES glut 下载和使用

目录 一.glut 简介二.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转…

企业实战(Jenkins+GitLab+SonarQube)_01_Jenkins下载

Jenkins是一个独立的开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务&#x…

const对象

const对象只能访问const成员函数和const成员变量。 其定义如下&#xff1a; const myClass s1; const myClass *ps1; myClass const *p; myClass const s2;

OpenGL ES glfw 下载和使用

目录 一.glfw 简介二.glfw 下载三.glfw 编译四.glfw 使用 1.OpenGL glfw glad 效果演示2.OpenGL glfw glad 《源码下载》 五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 &…