Added Logger class acting as threadsafe wrapper for QDebug
Bu işleme şunda yer alıyor:
ebeveyn
02ce27fc9f
işleme
dce13706e1
38
cli/logger.cpp
Normal dosya
38
cli/logger.cpp
Normal dosya
@ -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 dosya
46
cli/logger.h
Normal dosya
@ -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
|
Yükleniyor…
Yeni konuda referans
Bir kullanıcı engelle