Qt4使用qInstallMsgHandler函数往控制台和文件中写入日志
2018-01-23 15:06
1331 查看
qInstallMsgHandler 函数原型:QtMsgHandler qInstallMsgHandler(QtMsgHandler);
QtMsgHandler函数指针原型: typedef void( * QtMsgHandler)(QtMsgType, const char *);
qInstallMsgHandler用于自定义日志消息函数,下面是用法:
widget.h
交叉编译到开发板运行,可以看到控制台输出自定义的日志,当前工作目录下生成相应的日志文件:
QtMsgHandler函数指针原型: typedef void( * QtMsgHandler)(QtMsgType, const char *);
qInstallMsgHandler用于自定义日志消息函数,下面是用法:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); }; #endif // WIDGET_Hwidget.cpp
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { resize(800, 480); } Widget::~Widget() { }main.cpp
#include "widget.h" #include <QApplication> #include <QFile> #include <QTextStream> #include <QDebug> void myMessageOutput(QtMsgType type, const char *msg) { /* 往控制台中打印 */ switch (type) { case QtDebugMsg: fprintf(stderr, "%s\n", msg); break; case QtWarningMsg: fprintf(stderr, "Warning: %s\n", msg); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s\n", msg); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s\n", msg); abort(); } /* 输出到文件 */ QString txt; switch (type) { case QtDebugMsg: txt = QString("Debug: %1\n").arg(msg); break; case QtWarningMsg: txt = QString("Warning: %1\n").arg(msg); break; case QtCriticalMsg: txt = QString("Critical: %1\n").arg(msg); break; case QtFatalMsg: txt = QString("Fatal: %1\n").arg(msg); abort(); } QFile outFile("debug.log"); outFile.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream ts(&outFile); ts << txt << endl; } int main(int argc, char *argv[]) { qInstallMsgHandler(myMessageOutput); QString setscheduler = QString("renice -20 %1").arg(getpid()); qDebug() << "getpid = " << getpid(); qDebug() << "hello, world!"; qWarning() << "this is a warning!"; qCritical("This is a critical message"); qFatal("This is a fatal message"); system(qPrintable(setscheduler)); QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
交叉编译到开发板运行,可以看到控制台输出自定义的日志,当前工作目录下生成相应的日志文件:
相关文章推荐
- java web使用log4j无法写入到日志文件
- asp.net中使用Global.asax文件中添加应用出错代码,写入系统日志文件或数据库
- 使用Shell向syslog日志文件写入信息
- 模拟使用Flume监听日志变化_并且把增量的日志文件写入到hdfs中
- asp.net中使用Global.asax文件中添加应用出错代码,写入系统日志文件或数据库
- 网狐荣耀版vs生成解决方案时出现“出现未能写入日志,请求的操作无法在使用用户映射区域打开的文件上执行“错误
- Php可以使用error_log()函数直接打日志并写入文件
- asp.net中使用Global.asax文件中添加应用出错代码,写入系统日志文件或数据库
- python 通过logging写入日志到文件和控制台的实例
- ★实验 8-2 1. 创建两个守候进程。每个守候进程各自创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 守候进程 1:未使用的内存大小(MemFree) b) 守
- IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件
- 模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中
- ★实验 8-1 1. 创建一个守候进程。并为自己创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 未使用的内存大小(MemFree) 可以从/proc/meminf
- sl4j日志可在本地写入控制台和文件,在服务器不能写入文件
- Log4j基本使用方法(保存日志到控制台、文件、数据库中)
- 使用log4j2,控制台可以正常输出日志,但是log4j2日志文件为空?
- NSLog的注释及使用重定向;控制台内容写入文件
- 模拟使用Flume监听日志变化,并且把增量的日志文件写入到hdfs中
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- python 通过logging写入日志到文件和控制台