zoukankan      html  css  js  c++  java
  • Qt 日志宏

    随便写了一个日志帮助的宏,既可以如同qDebug()一般在调试时输出信息,也可以在输出文本文件

    #ifndef LOG_H
    #define LOG_H
    
    #include <QDir>
    #include <QFile>
    #include <QString>
    #include <QDebug>
    #include <QDate>
    #include <QTime>
    #include <QDateTime>
    #include <QTextStream>
    
    #define WRITE_LOG_FILE(type,msg)(
    {QString err;
        switch(type){
            case QtDebugMsg:{err = "调试信息:";}break;
            case QtWarningMsg:{err = "警告信息:";}break;
            case QtCriticalMsg:{err = "严重错误:";}break;
            case QtFatalMsg:{err = "致命错误:";}break;
            default:{err = "常规信息:";}break;}
        QString text = QString("%1
     所在文件:%2 
     所在位置:%3 
     记录时间:%4 
     记录信息:%5 
    ").arg (err).arg (__FILE__).arg (__LINE__).arg (QDateTime::currentDateTime ().toString ("yyyy-MM-dd hh:mm:ss ddd")).arg (msg);qDebug() << text;
        QDir dir;
        QString path = dir.currentPath () + "\log\";
        QDateTime dt = QDateTime::currentDateTime ();
        QTime t = dt.time ();
        QDate d = dt.date ();
        QString name = QString("%1%2%3%4").arg (QString::number (d.year ())).arg (QString::number (d.month ())).arg (QString::number (d.day ())).arg (QString::number (t.hour ())) + QString(".txt");
        QString filePath = path + name;
        if(!dir.exists(path))
        {
            dir.mkpath(path);
        }
        QFile file(filePath);
        if(!file.exists ())
        {
            file.open (QIODevice::WriteOnly);
            file.close ();
        }
        if(file.open(QIODevice::WriteOnly | QIODevice::Append))
        {
            QTextStream stream(&file);
            stream << text << "
    ";
            file.flush();file.close();
        }
    })
    #define DEBUG_LOG(msg)(WRITE_LOG_FILE(QtDebugMsg,msg))
    #define WARNING_LOG(msg)(WRITE_LOG_FILE(QtWarningMsg,msg))
    #define CRITICAL_LOG(msg)(WRITE_LOG_FILE(QtCriticalMsg,msg))
    #define FATAL_LOG(msg)(WRITE_LOG_FILE(QtFatalMsg,msg))
    #define LOG(msg)(WRITE_LOG_FILE(-1,msg))
    
    #endif // LOG_H
  • 相关阅读:
    生产者消费者问题--进阶
    互斥量和信号量的区别
    linux多线程大神博客网址
    生产者消费者
    文件互斥
    Linux中link,unlink,close,fclose详解
    条件变量
    哲学家进餐问题-3中解决方案
    使用读写锁解决读者-写者问题
    架构漫谈(三):如何做好架构之识别问题
  • 原文地址:https://www.cnblogs.com/rogation/p/4040361.html
Copyright © 2011-2022 走看看