Added Logger class acting as threadsafe wrapper for QDebug
Esse commit está contido em:
		
							
								
								
									
										36
									
								
								cli/logger.cpp
									
									
									
									
									
										Arquivo normal
									
								
							
							
						
						
									
										36
									
								
								cli/logger.cpp
									
									
									
									
									
										Arquivo normal
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#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;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								cli/logger.h
									
									
									
									
									
										Arquivo normal
									
								
							
							
						
						
									
										43
									
								
								cli/logger.h
									
									
									
									
									
										Arquivo normal
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#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
 | 
			
		||||
		Referência em uma nova issue
	
	Block a user