Qt之日志输出文件

来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101guc5.html

在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替。

做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪、定位,Qt也提供的类似的机制。之前用Qt4做项目时使用的是Qt::qInstallMsgHandler(),到了Qt5,使用了新的Qt::qInstallMessageHandler()来替代,详情请查看Qt助手(C++ API changes)。

描述

助手中在C++ API changes中提到:Qt::qDebug()、Qt::qWarning()、Qt::qCritical()、Qt::qFatal()被改变为宏来跟踪源代码的消息来源。被打印的信息可以被配置(用于缺省消息处理程序),通过设置该新的环境变量QT_MESSAGE_PATTERN。Qt::qInstallMsgHandler()已过时,因此建议使用Qt::qInstallMessageHandler()来代替。

级别

  • qDebug:调试信息
  • qWarning:警告信息
  • qCritical:严重错误
  • qFatal:致命错误

官方示例

需求(目的):生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。

void outputMessage(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:");

}

QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);

QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");

QString current_date = QString("(%1)").arg(current_date_time);

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

QFile file("log.txt");

file.open(QIODevice::WriteOnly | QIODevice::Append);

QTextStream text_stream(&file);

text_stream << message << "\r\n";

file.flush();

file.close();

mutex.unlock();

}

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

//注册MessageHandler

qInstallMessageHandler(outputMessage);

//打印日志到文件中

qDebug("This is a debug message");

qWarning("This is a warning message");

qCritical("This is a critical message");

qFatal("This is a fatal message");

return app.exec();

}

效果如下:

注:

技术在于交流、沟通,转载请注明出处并保持作品的完整性。

作者:╰☆奋斗ing?孩子` 原文:http://blog.sina.com.cn/s/blog_a6fb6cc90101guc5.html

时间: 2025-01-04 10:45:09

Qt之日志输出文件的相关文章

Qt之qInstallMessageHandler(日志输出文件)

简述 在Qt之qInstallMessageHandler(输出详细日志)一节中,我们讲解了如何使用自定义消息处理程序输出调试信息,而且可以很直观.很方便的得到输出代码所在的文件.函数.行号等信息. 当软件发布的时候,通常都会采用日志输出功能,方便我们后期的跟踪.查找问题. 简述 自定义消息处理 效果 源码 更多参考 自定义消息处理 下面,我们来根据需要自定义消息处理程序.其中输出格式包含:输出信息.文件.函数.行号.日期时间.这样就很利于我们追踪了. 效果 源码 void myMessageO

log4j中日志输出文件指定相对路径的方法

我想大多数使用Log4j输出日志到文件系统的朋友可能都碰到过这个问题吧. 那就是在log4j的配置文件中无法指定相对路径,比如如下的配置就会有问题: log4j.appender.E = org.apache.log4j.RollingFileAppender log4j.appender.E.File = ../log/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.append

Log4Qt快速入门——Log4Qt日志输出重定向源码解析

Log4Qt快速入门--Log4Qt日志输出重定向源码解析 一.Appender简介 1.Appender简介 Appender是所有Appender的抽象类,是对记录日志形式的抽象.Log4Qt(Qt4版本)中Appender继承体系如下: 2.Appender接口 virtual Filter *filter() const = 0; virtual QString name() const = 0; virtual Layout *layout() const = 0; virtual b

Log4j将不同Package的日志输出到不同的文件

转自:http://www.crazyant.net/1931.html 随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志.对外发送消息的日志: 后台常驻线程的处理日志: 外部接口访问的参数.返回结果等接口日志: Service访问数据库产生的SQL日志: 这其中,消息日志和后台线程的日志数据量非常庞大,如果所有日志打印在一个文件中,使用tail -f log.log文件,会发现日

log4j日志输出到web项目指定文件夹

感谢 eric2500 的这篇文章:http://www.cxyclub.cn/n/27860/ 摘要:尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终在eric2500的指导下搞定,下面是记录. 其原理在于log4j的配置文件支持服务器的vm的环境变量,如${oss.log4j.path},在log4j加载配置文件之前,先用 System.setProperty("","")设置好日志文件路径,这一操作通过一个初始的servlet来实现.

JAVA中自定义日志输出到指定文件

虽然JAVA日志包提供的功能已经很方便,但是假如我们有新的需求如:将日志文件保存到我们希望的位置并在日志文件名中添加日期且保存指定时间内的日志文件:按照自己希望的格式输出日志内容.对于这些需求我们只要扩展java.util.logging.StreamHandler(Handler的子类),java.util.logging.Formatter创建自定义的处理器及格式化器即可以实现.下面是个例子,它分别创建了Handler及Formatter的子类,以便实现将日志文件保存到我们需要的位置,及在日

Android 使用Log4j把日志写入SD卡,动态修改输出文件名称

一.Log4j简单使用 1. 下载log4j.jar http://logging.apache.org/log4j/2.x/ 2. 创建Java代码 public class Loggers { public static Logger logger = Logger. getLogger(Loggers. class); public static void init() { try { PatternLayout patternLayout = new PatternLayout(); p

C#中使用Log4net日志输出到本地文件、Textbox或Listview

网上很多配置log4net的方法,但是排行靠前的 根本就没有说明清除,导致浪费了两个小时来搞清楚如何配置,真是无语,特写此文,给那些刚接触log4net的朋友 1.参考链接:http://blog.sina.com.cn/s/blog_642e41c201014pml.html 此方法是直接将配置文件配置在app.config <configSections> <!--在配置选项中加入log4net的引用--> <section name="log4net"

不让应用的日志输出到message文件中

有时我们制定一个应用的日志输出到一个文件的时候例如: (百度了好久都百度不好,这里记录一下时间2015年12月7日16:28:39) local7.*                                                /var/log/XXXX.log 但是如果你tail查看message的时候.也会有输出.如果对一个IO要求比较高的系统就不太友好了.所以我们需要屏蔽掉输出到message. 机智的我发现/etc/rsyslog.conf里面有关于message的输出