test_sdk/core/gtl_logger.h

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