Added Logger class acting as threadsafe wrapper for QDebug
This commit is contained in:
		
							
								
								
									
										38
									
								
								cli/logger.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								cli/logger.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| #include <QMutexLocker> | ||||
| #include "logger.h" | ||||
|  | ||||
| Logger::Logger(QFile *file) | ||||
| { | ||||
|     out = new QDebug(file); | ||||
|     this->file = file; | ||||
| } | ||||
|  | ||||
| Logger::Logger(Logger &&o) | ||||
| { | ||||
|     this->out = o.out; | ||||
|     o.out = nullptr; | ||||
| } | ||||
|  | ||||
| Logger &Logger::error() | ||||
| { | ||||
|     static Logger result  = []{ | ||||
|         QFile *file = new QFile(); | ||||
|         file->open(stderr, QIODevice::WriteOnly); | ||||
|         return Logger(file); | ||||
|     }(); | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| Logger &Logger::info() | ||||
| { | ||||
|     static Logger result  = []{ | ||||
|         QFile *file = new QFile(); | ||||
|         file->open(stdout, QIODevice::WriteOnly); | ||||
|         return Logger(file); | ||||
|     }(); | ||||
|     return result; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										46
									
								
								cli/logger.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								cli/logger.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| #ifndef LOGGER_H | ||||
| #define LOGGER_H | ||||
| #include <QFile> | ||||
| #include <QDebug> | ||||
| #include <QMutex> | ||||
| class Logger | ||||
| { | ||||
| private: | ||||
|     QDebug *out; | ||||
|     QMutex mutex; | ||||
|     QFile *file; | ||||
| public: | ||||
|     Logger(QFile *file); | ||||
|     Logger(Logger &&o); | ||||
|  | ||||
|     template<class T> | ||||
|     Logger &operator <<(const T &val) | ||||
|     { | ||||
|         QMutexLocker locker(&this->mutex); | ||||
|         *out << val; | ||||
|         file->flush(); | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     template<class T> | ||||
|     Logger &operator <<(const T *val) | ||||
|     { | ||||
|         QMutexLocker locker(&this->mutex); | ||||
|         *out << val; | ||||
|         file->flush(); | ||||
|         return *this; | ||||
|     } | ||||
|  | ||||
|     ~Logger() | ||||
|     { | ||||
|         delete out; | ||||
|     } | ||||
|  | ||||
|  | ||||
|  | ||||
|     static Logger& error(); | ||||
|  | ||||
|     static Logger& info(); | ||||
| }; | ||||
|  | ||||
| #endif // LOGGER_H | ||||
		Reference in New Issue
	
	Block a user