109 lines
3.6 KiB
C++
109 lines
3.6 KiB
C++
#ifndef GTL_LOGGER_H
|
|
#define GTL_LOGGER_H
|
|
|
|
#include <QThread>
|
|
#include <QObject>
|
|
#include <QDir>
|
|
#include <QTextStream>
|
|
#include <QFile>
|
|
#include "core_global.h"
|
|
|
|
namespace gtl
|
|
{
|
|
|
|
enum class log_level {
|
|
info,
|
|
warning,
|
|
error,
|
|
debug
|
|
};
|
|
|
|
|
|
|
|
class CORE_EXPORT logger : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum file_size_unit {
|
|
b,
|
|
kb,
|
|
mb,
|
|
gb
|
|
};
|
|
|
|
static logger *getInstance(void);
|
|
static void init(const QString &path, const uint32_t max_file_size, const file_size_unit unit);
|
|
static void info(const QString &tag, const QString &text);
|
|
static void warning(const QString &tag, const QString &text);
|
|
static void error(const QString &tag, const QString &text);
|
|
static void debug(const QString &tag, const QString &text);
|
|
|
|
private:
|
|
static QFile _log_file;
|
|
static QString _path;
|
|
static QString _file_name;
|
|
static QThread _thread;
|
|
static uint32_t _max_file_size;
|
|
static uint32_t _max_index;
|
|
|
|
static void open_file(void);
|
|
static QString find_last_file(void);
|
|
static bool check_file_size(const QString& path);
|
|
|
|
protected:
|
|
logger(QObject *parent = nullptr);
|
|
~logger();
|
|
|
|
bool _is_continue;
|
|
static uint32_t get_file_size_unit(const file_size_unit unit);
|
|
QString get_level_string(const log_level level);
|
|
QString get_time_string(void);
|
|
QString get_date_string(void);
|
|
|
|
|
|
|
|
signals:
|
|
void sgn_info(const QString &tag, const QString &text);
|
|
void sgn_warning(const QString &tag, const QString &text);
|
|
void sgn_error(const QString &tag, const QString &text);
|
|
void sgn_debug(const QString &tag, const QString &text);
|
|
void sgn_send_to_viewer(const QString &level, const QString &date, const QString &time, const QString &tag, const QString &text);
|
|
|
|
|
|
public slots:
|
|
void slt_info(const QString &tag, const QString &text) { log(log_level::info, tag, text); }
|
|
void slt_warning(const QString &tag, const QString &text){ log(log_level::warning, tag, text); }
|
|
void slt_error(const QString &tag, const QString &text) { log(log_level::error, tag, text); }
|
|
void slt_debug(const QString &tag, const QString &text) { log(log_level::debug, tag, text); }
|
|
|
|
void log(log_level level = log_level::info, const QString &tag = "FLUSH", const QString &text = "flush")
|
|
{
|
|
QString s_level = get_level_string(level);
|
|
QString s_date = get_date_string();
|
|
QString s_time = get_time_string();
|
|
|
|
QString str_new = "[" + s_level + "]::[" +\
|
|
s_date + "]::[" +\
|
|
s_time + "]::[" +\
|
|
tag + "]::" +\
|
|
text + "\n";
|
|
|
|
QTextStream textStream(&_log_file);
|
|
textStream << str_new.toStdString().c_str();
|
|
|
|
if(false == check_file_size(_file_name))
|
|
{
|
|
_max_index += 1;
|
|
_file_name = _path + QDir::separator() + "log_" + QString::number(_max_index).rightJustified(4, '0');
|
|
|
|
open_file();
|
|
}
|
|
|
|
emit sgn_send_to_viewer(s_level, s_date, s_time, tag, text);
|
|
}
|
|
};
|
|
}
|
|
|
|
#endif // GTL_LOGGER_H
|