Qt文件日志


#include <QString>

 
  
class CFileMessageHandler
{
public:
    CFileMessageHandler();
    ~CFileMessageHandler();

 
  
protected:
   static void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg);
   static QString getFileName();

 
  
private:
   QtMessageHandler m_holdMsgHandler;
};


 
  
 
  
 
  
 
  
 
  
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QApplication>
#include <QStandardPaths>
#include <QDir>

 
  
CFileMessageHandler::CFileMessageHandler()
{
    m_holdMsgHandler = qInstallMessageHandler(CFileMessageHandler::myMessageOutput);
}

 
  
CFileMessageHandler::~CFileMessageHandler()
{
    qInstallMessageHandler(0);
}

 
  
void CFileMessageHandler::myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QString filename = getFileName();
    QFile file(filename);
    if(file.open(QIODevice::Append))
    {
        QTextStream stream(&file);
        stream << msg;
    }
}

 
  
QString CFileMessageHandler::getFileName()
{
    QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
    path += "/log";
    QDir dir(path);
    if(!dir.exists())
    {
        dir.mkpath(path);
    }
 
  
    QDateTime datetime = QDateTime::currentDateTime();
    QString str = datetime.toString("yyyy_MM_dd");
    QString appName = QApplication::applicationDisplayName();
    path += "/" + appName + str + ".log";
 
  
    return path;
}


 
  
 
  
使用时,只需要在主函数QApplication a(argc, argv);之后定义一个CFileMessageHandler对象即可。

猜你喜欢

转载自blog.csdn.net/wolfseek/article/details/41729619
今日推荐