zoukankan      html  css  js  c++  java
  • QT单例多文件日志类

      1 #ifndef TLOGGER_H
      2 #define TLOGGER_H
      3 
      4 #include <QDebug>
      5 #include <QFile>
      6 #include <QMutexLocker>
      7 
      8 
      9 #define TLOG_OPEN(x,y) TLogger::getInstance()->openLog(x,y);
     10 #define TLOG_PRINT(y,z) TLogger::getInstance()->printLog(y,z);
     11 
     12 class TLogger
     13 {
     14 private:
     15     TLogger()
     16     {
     17         qDebug() << "Singleton construction";
     18     }
     19 
     20     TLogger(const TLogger&);
     21     TLogger& operator = (const TLogger&);
     22 
     23     class TGC
     24     {
     25     public:
     26         TGC()
     27         {
     28             qDebug() << "TGC construction";
     29         }
     30         ~TGC()
     31         {
     32             qDebug() << "TGC destruction, m_pInstance=" << m_pInstance;
     33             if(m_pInstance)
     34             {
     35                 m_pInstance->clearFile();
     36 
     37                 delete m_pInstance;
     38                 m_pInstance = 0;
     39                 qDebug() << "TLogger destruction";
     40             }
     41             qDebug() << "TGC destruction, m_pInstance=" << m_pInstance;
     42         }
     43     };
     44 
     45     static TLogger* m_pInstance;
     46     static TGC      m_garbage_collection;
     47     static QMutex   m_mutex;
     48     QMap<QString, QFile*>   m_files;
     49 public:
     50     static TLogger* getInstance()
     51     {
     52         qDebug() << "m_pInstance =" << m_pInstance;
     53         if(0==m_pInstance)
     54         {
     55             QMutexLocker lock(&m_mutex);
     56             m_pInstance = new TLogger();
     57         }
     58         qDebug() << "m_pInstance =" << m_pInstance;
     59 
     60         return m_pInstance;
     61     }
     62 
     63     void openLog(const QString& path, const QString& alias)
     64     {
     65         if(!m_files.contains(alias))
     66         {
     67             QFile* file = new QFile(path);
     68             if(file->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
     69             {
     70                 m_files.insert(alias, file);
     71             }
     72         }
     73     }
     74 
     75     void printLog(const QString& alias, const QString& data)
     76     {
     77         if(m_files.contains(alias))
     78         {
     79             QMutexLocker lock(&m_mutex);
     80             QFile* file = m_files[alias];
     81             if(file && file->isOpen())
     82             {
     83                 QTextStream out(file);
     84                 out << data << endl;
     85             }
     86         }
     87     }
     88 
     89     void clearFile()
     90     {
     91         for(QFile* file : m_files.values())
     92         {
     93             if(file)
     94             {
     95                 file->close();
     96                 delete file;
     97             }
     98         }
     99     }
    100 };
    101 
    102 #include <QThread>
    103 class QThreadLog : public QThread
    104 {
    105 protected:
    106     void run()
    107     {
    108         for(int i=0;i<10000;i++)
    109         {
    110             QString id = QString::number((quint64)currentThreadId());
    111             QString file = QString("d:/11__%1.txt").arg(id);
    112             TLOG_OPEN(file, id);
    113             TLOG_PRINT(id, "abcdefghijklmnopqrstuvwxyz"+id);
    114             usleep(10);
    115         }
    116     }
    117 };
    118 
    119 class QLogTest
    120 {
    121 public:
    122     void forTest()
    123     {
    124         for(int i=0;i<10;i++)
    125         {
    126             QThreadLog* t = new QThreadLog();
    127             if(t)
    128             {
    129                 t->start();
    130             }
    131         }
    132     }
    133 };
    134 
    135 #endif // TLOGGER_H
    1 #include "tlogger.h"
    2 
    3 TLogger* TLogger::m_pInstance = 0;
    4 TLogger::TGC TLogger::m_garbage_collection;
    5 QMutex TLogger::m_mutex;
  • 相关阅读:
    失衡天平
    简单 hash 入门题目
    美团codem 数列互质
    最小圆覆盖
    求1-n 中与 m 互质的素因子 (容斥原理)
    格式化输出;while循环;运算符
    python的历史 常量 注释 基础数据类型等基本操作 和if 判断语句
    异常的概念
    isinstance与issubclass
    面向对象——内置函数
  • 原文地址:https://www.cnblogs.com/jobgeo/p/6868230.html
Copyright © 2011-2022 走看看