| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #ifndef QLOG_H
- #define QLOG_H
- #include <QObject>
- #include <QTextStream>
- #include <QFile>
- #include <QCoreApplication>
- #include <QSharedPointer>
- #include <QReadWriteLock>
- #include <QThread>
- //QtDebugMsg 0 A message generated by the qDebug() function.
- //QtInfoMsg 4 A message generated by the qInfo() function.
- //QtWarningMsg 1 A message generated by the qWarning() function.
- //QtCriticalMsg 2 A message generated by the qCritical() function.
- //QtFatalMsg 3 A message generated by the qFatal() function.
- #define LOG(log,Level) if (log->checkLevel(Level)) \
- QLOG::LogMessage(log,__FILE__, __LINE__,Level).stream()
- #define QLogTest(log) LOG(log,QLOG::TestMsg)
- #define QLogDebug(log) LOG(log,QLOG::DebugMsg)
- #define QLogInfo(log) LOG(log,QLOG::InfoMsg)
- #define QLogWarning(log) LOG(log,QLOG::WarningMsg)
- #define QLogCritical(log) LOG(log,QLOG::CriticalMsg)
- #define QLogFatal(log) LOG(log,QLOG::FatalMsg)
- #define LOGD(Level) if (QLOG::QLogManger::this_()->baseLog()->checkLevel(Level)) \
- QLOG::LogMessage(QLOG::QLogManger::this_()->baseLog(),__FILE__, __LINE__,Level).stream()
- #define QDTest LOGD(QLOG::TestMsg)
- #define QDDebug LOGD(QLOG::DebugMsg)
- #define QDInfo LOGD(QLOG::InfoMsg)
- #define QDWarning LOGD(QLOG::WarningMsg)
- #define QDCritical LOGD(QLOG::CriticalMsg)
- #define QDFatal LOGD(QLOG::FatalMsg)
- namespace QLOG {
- class QLog;
- enum LogLevel{
- TestMsg = 0,
- DebugMsg = 1,
- InfoMsg = 2,
- WarningMsg = 3,
- CriticalMsg = 4,
- FatalMsg = 5,
- };
- enum OutState{
- STD_OUT = 0,
- STD_ERROR = 1,
- File = 2
- };
- enum FileCreateType
- {
- OnlyOne,
- OneStartOne,
- DayOne,
- HourOne,
- MonthOne
- };
- class LogMessage
- {
- public:
- LogMessage(QLog * log, const char * file, int line, LogLevel level);
- LogMessage(QLog * log,LogLevel level);
- ~LogMessage();
- inline QTextStream & stream() {return ts;}
- private:
- QLog * log;
- QString str_;
- QTextStream ts;
- LogLevel level_;
- };
- class LogEvent;
- // TODO:
- class QLogManger : public QObject
- {
- Q_OBJECT
- public:
- ~QLogManger();
- static QLogManger * this_();
- inline QLog * baseLog()const {
- return _baseLog.data();
- }
- inline QLog * qDebugLog()const {
- return _baseLog.data();
- }
- bool setSaveFilePath(const QString & path);
- QLog * enbleQtMessage();
- QLog * getLog(const QString & name);
- inline QString getSaveFilePath() const {return path_;}
- signals:
- void updateSavePath();
- private:
- QString path_;
- QLogManger();
- QReadWriteLock _locker;
- QHash<QString, QSharedPointer<QLog>> _logs;
- QSharedPointer<QLog> _baseLog;
- QSharedPointer<QLog> _qtLog;
- QThread _thread;
- };
- class QLog : public QObject
- {
- Q_OBJECT
- public:
- ~QLog();
- inline bool checkLevel(LogLevel level) {
- if (level < this->level) {
- return false;
- }
- return true;
- }
- bool writeTime;
- bool writeFileInfo;
- bool writeLevel;
- bool writeEndLine;
- LogLevel level;
- FileCreateType fileCreateType;;
- void setOutState(OutState outState);
- inline OutState getOutState() const {return state_;}
- protected:
- void customEvent(QEvent * event);
- protected slots:
- void restLog();
- void releaseLogFile();
- private:
- OutState state_;
- QFile * file_;
- QTextStream ts_;
- QString _name;
- int _fileCreateId;
- private:
- explicit QLog(const QString & name,OutState state = File);
- friend class QLogManger;
- friend class LogMessage;
- };
- } //namespace QLOG
- #endif // QLOG_H
|