文档章节

Qt 日志输出文件

i
 iblackangel
发布于 2017/08/31 00:39
字数 443
阅读 27
收藏 0
点赞 0
评论 0
Qt

日志级别

  • QtDebugMsg 对应 qDebug() 函数
  • QtInfoMsg 对应 qInfo() 函数
  • QtWarningMsg 对应 qWarning() 函数
  • QtCriticalMsg 对应 qCritical() 函数
  • QtFatalMsg 对应 qFatal() 函数

官方例子

在 QtCreator 中打开 Help->Index 输入 qInstallMessageHandler 查询

#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);
        abort();
    }
}

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

重定义需求

我们需要将日志文件输出到固定的日志文件中去,在 Windows 平台下习惯放在程序当前目录下,在 Linux 平台下按惯例放置于 /var/log 目录下,以程序名命名,同时以 .log 结尾。

#include <QFile>
#include <QDebug>
#include <QDateTime>
#include <QTextStream>
#include <QMutexLocker>
#include <QtGlobal>

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    static QMutex mutex;
    QMutexLocker locker(&mutex);

    QString text;
    switch(type) {
    case QtDebugMsg:
        text = QString("Debug:");
        break;
    case QtInfoMsg:
        text = QString("Info:");
        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);

#if defined(_WIN32) || defined(_WIN64)
    const char *eol = "\r\n";
    const char *logfile = "app.log";
#else
    const char *eol = "\n";
    const char *logfile = "/var/log/app.log";
#endif
    QFile file(logfile);
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&file);
    text_stream << message << eol;
    file.flush();
    file.close();
}

int main(int argc, char *argv[])
{
    qInstallMessageHandler(outputMessage);
    QApplication a(argc, argv);

    qDebug() << "This is a debug message";
    qInfo() << "This is an info message";
    qWarning() << "This is a warning message";
    qCritical() << "This is a critical message";

    // call qFatal() will cause app CRASHED
    //qFatal("Now, This is an fatal error message");

    return a.exec();
}

参考资料

[1] Qt之日志输出文件

© 著作权归作者所有

共有 人打赏支持
i
粉丝 0
博文 47
码字总数 14784
作品 0
广州
程序员
Log4Qt 使用笔记(一)

没用过Log4J和Log4CXX,初次接触Log4Qt,还真有点头昏脑胀,无论如何,先简单记录一下。 Log4Qt Log4Qt 是Apache Log4J 的Qt移植版,所以看Log4J的资料应该是最直接有效的(因为Log4Qt的直接资...

晨曦之光
2012/05/08
221
0
Log4Qt 基本介绍

简述 在项目开发过程中,离不开代码的调试、Bug 的追踪,这时日志便显得尤为重要。 在 C++ 中,主流的日志组件有 Log4cpp、log4cplus、log4cxx。。。很神奇吧,全都以 log4 开头,这是因为它...

u011012932
2017/12/11
0
0
Qt 实现 Logger 日志的显示

Qt qDebug or 开源库 基于 Qt qDebug Qt 提供 或者,可以对QDebug、QWarning、QError等进行重定向等处理。 可以参考Qt Assistant 的帮助文档,或者参考[Qt之日志输出文件][1]进行实现。 缺点...

NineRec
2014/12/07
0
0
Log4Qt 日志级别

简述 Log4Qt 定义了一系列的日志级别,每个级别都对应一种特定类型的消息事件。通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 版权所有:一去丶二三里,转载请注明...

u011012932
2017/12/19
0
0
Log4Qt使用笔记(三)

接前面Log4Qt 使用笔记(一),继续学习一下,关注环境变量和初始化: Logger 在前面,我们提到,除了一个根root之外,还可以有多个命名的Logger存在,为了直观,我们可以看LogManager的成员函...

晨曦之光
2012/05/08
1K
0
Log4Qt 中的 rootLogger、logLogger、qtLogger

简述 使用 Log4Qt 时,你会发现有一系列的 Logger - rootLogger、logLogger、qtLogger。。。蒙圈,有木有?简直傻傻分不清楚! Why?这么多 Logger,它们到底有什么关系?均适用于哪种场景?...

u011012932
2017/12/13
0
0
ubuntu 16.04 安装 shadowsocks-qt5 并配置 pac 全局代理

一、安装 shadowsocks-qt5 shadowsocks-qt5 需要通过PPA源安装,仅支持Ubuntu 14.04或更高版本。 1、设置 PPA 源并安装 shadowsocks-qt5 2、安装过程遇到 libappindicator1 依赖问题(depen...

晴难自控
01/10
0
0
Qt Quick调试之显示代码行号

QML 文档可以使用 console 对象来打印日志信息,可默认是无法输出行号的。帮助文档中说需要设置 QMLCONSOLEEXTENDED 环境变量即可,测试了一下不管用。后来找到 qt.gitorious.org 上的一个文...

foruok
2014/10/31
0
0
Qt 文件监视器 QFileSystemWatcher

之前有过对Qt的QFile以Text纯文本方式进行读取时的学习,这两天由于实时需要又对QFileSystemWatcher(这个类是干什么用的)进行了学习,发现也是问题很让人头疼. 我想监视一个文件夹(比如:"F:QtW...

剑神
2013/07/16
3.1K
3
获取 Log4Qt 中的 logger

简述 在 Log4Qt 中,有一个很重要的类 - Logger,用于提供日志服务。那么,如何获取 logger 呢? 关于这部分,Log4Qt 中有一个简单的描述: Request a logger by either calling Log4Qt::Log...

u011012932
2017/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 基础 - 远程仓库的使用

远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某...

谢思华
11分钟前
0
0
面试宝典-悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 乐观锁(Optimistic...

suyain
12分钟前
0
0
崛起于Springboot2.X之集成MongoDb使用mongoTemplate CRUD(27)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
23分钟前
0
0
切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
28分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
33分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
35分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
35分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
35分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
38分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部