Program Listing for File PDJE_LOG_SETTER.hpp

Return to documentation for file (include\PDJE_LOG_SETTER.hpp)

#pragma once

#include <filesystem>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/spdlog.h>
#include <string_view>
#include <type_traits>

inline void
startlog()
{
#ifndef LOG_OFF
    std::filesystem::create_directories("logs");
    auto fileSink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
        "logs/pdjeLog.txt", true);
    auto consoleSink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();

    std::vector<spdlog::sink_ptr> sinks{ consoleSink, fileSink };

    auto logger = std::make_shared<spdlog::logger>(
        "global_logger", sinks.begin(), sinks.end());
#ifndef NDEBUG
    logger->set_level(spdlog::level::debug);
#else
    logger->set_level(spdlog::level::err);
#endif
    logger->flush_on(spdlog::level::err);
    logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] %v");
    spdlog::set_default_logger(logger);

#endif
}

#ifndef LOG_OFF
#ifdef ENABLE_INFO_LOG
#define infolog(...) SPDLOG_INFO(__VA_ARGS__)
#else
#define infolog(...)
#endif

#ifdef ENABLE_WARN_LOG
#define warnlog(...) SPDLOG_WARN(__VA_ARGS__)
#else
#define warnlog(...)
#endif

#define critlog(...) SPDLOG_CRITICAL(__VA_ARGS__)
#else
#define infolog(...)
#define warnlog(...)
#define critlog(...)
#endif