实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)

一、基本分类:
qDebug : 调试信息提示
qWarning: 一般的警告提示
qCritical: 严重错误提示
qFatal: 致命错误提示

二、如何截获这些信息

Qt提供了qInstallMsgHandler 方法用来定制消息发生后如何来处理。
qInstallMsgHandler 是一个回调函数,主要是由qDebug、qWarnng、qCritical、qFatal这些函数进行触发,
也就是说,qDeubg这些函数处理的消息文本会被qInstallMsgHandler 所指向的回调函数截获,这样就允许用户自己来处理这些消息文本。
例如,你完全可以将这些消息文本输出并保存到相关的日志文件中。请看下面的示例!

三、将qDebug()\qWarning()\qCritical()\qFatal() 信息输出到指定文件中

 1  #include  < QtDebug >
 2  #include  < QFile >
 3  #include  < QTextStream >
 4 
 5  void  customMessageHandler(QtMsgType type,  const   char   * msg)
 6  {
 7          QString txt;
 8           switch  (type) {
 9           // 调试信息提示
10           case  QtDebugMsg:
11                  txt  =  QString( " Debug: %1 " ).arg(msg);
12                   break ;
13 
14           // 一般的warning提示
15           case  QtWarningMsg:
16                  txt  =  QString( " Warning: %1 " ).arg(msg);
17           break ;
18           // 严重错误提示
19           case  QtCriticalMsg:
20                  txt  =  QString( " Critical: %1 " ).arg(msg);
21           break ;
22           // 致命错误提示
23           case  QtFatalMsg:
24                  txt  =  QString( " Fatal: %1 " ).arg(msg);
25                  abort();
26          }
27 
28          QFile outFile( " debuglog.txt " );
29          outFile.open(QIODevice::WriteOnly  |  QIODevice::Append);
30          QTextStream ts( & outFile);
31          ts  <<  txt  <<  endl;
32  }
33 
34  int  main(  int  argc,  char   *  argv[] )
35  {
36          QApplication app( argc, argv );
37 
38           // 先注册自己的MsgHandler
39          qInstallMsgHandler(customMessageHandler);        
40          
41           // 以后就可以像下面这样直接打日志到文件中,而且日志也会包含时间信息
42          qDebug( " This is a debug message at thisisqt.com " );
43          qWarning( " This is a warning message  at thisisqt.com " );
44          qCritical( " This is a critical message  at thisisqt.com " );
45          qFatal( " This is a fatal message at thisisqt.com " );
46 
47           return  app.exec();
48  }


四、如何取消信息处理呢?
简单:
还是用qInstallMsgHandler.
只要执行qInstallMsgHandler(0) 就可以了

你可能感兴趣的:(实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal))