#ifndef GTL_LOGGER_H #define GTL_LOGGER_H #include #include #include #include #include #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