Program Listing for File PDJE_LOG_SETTER.hpp

Return to documentation for file (include/global/PDJE_LOG_SETTER.hpp)

#pragma once

#include <filesystem>
#include <mutex>
#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 std::once_flag SPD_LOG_ONCE_FLAG;
inline void
startlog()
{
#ifndef LOG_OFF
    std::call_once(SPD_LOG_ONCE_FLAG, []() {
        std::filesystem::create_directories("logs");
        auto fileSink = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
            "logs/pdjeLog.txt", false);

        std::vector<spdlog::sink_ptr> sinks{ 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