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