TeaSpeakLibrary/src/log/LogSinks.h

51 lines
1.6 KiB
C++

#pragma once
#define SPDLOG_FINAL
#define SPDLOG_ALLOW_PROTECT
#define SPDLOG_NO_FINAL //We need to override the rotating logger
#include <spdlog/logger.h>
#include <spdlog/sinks/file_sinks.h>
namespace logger {
struct force_log_msg : public spdlog::details::log_msg
{
force_log_msg() = default;
virtual ~force_log_msg() = default;
force_log_msg(const std::string *loggers_name, spdlog::level::level_enum lvl, bool force) : log_msg(loggers_name, lvl), force(force) { }
force_log_msg(const log_msg& other) = delete;
force_log_msg(log_msg&& other) = delete;
force_log_msg(const force_log_msg& other) = delete;
force_log_msg& operator=(force_log_msg&& other) = delete;
force_log_msg(force_log_msg&& other) = delete;
bool force;
};
class TerminalSink : public spdlog::sinks::sink {
public:
void log(const spdlog::details::log_msg &msg) override;
void flush();
bool should_log_(const spdlog::details::log_msg &msg) const override;
};
class ColoredFileSink : public spdlog::sinks::rotating_file_sink_mt {
public:
ColoredFileSink(const spdlog::filename_t &base_filename, size_t max_size, size_t max_files);
protected:
void _sink_it(const spdlog::details::log_msg &msg) override;
};
class CostumeFormatter : public spdlog::formatter {
public:
void format(spdlog::details::log_msg &msg) override;
private:
inline std::string time(std::chrono::time_point <spdlog::log_clock> point);
};
}