/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: Logging.hpp Date: 2021-9-21 Author: Reece ***/ #pragma once #include "ILogger.hpp" #include "IBasicSink.hpp" #include "IBasicSinkRB.hpp" #include "Sinks.hpp" namespace Aurora::Console::Logging { #if defined(_AUHAS_FMT) template inline void WriteLinef(AuUInt8 level, const AuString &tag, const AuString &msg, T&& ... args) { WriteLine(level, ConsoleMessage(EAnsiColor::eReset, tag, fmt::format(msg, AuForward(args)...))); } template inline void WriteLinef(AuUInt8 level, EAnsiColor color, const AuString &tag, const AuString &msg, T&& ... args) { WriteLine(level, ConsoleMessage(color, tag, fmt::format(msg, AuForward(args)...))); } template inline void LogVerbose(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eVerbose), EAnsiColor::eYellow, "Verbose", line, AuForward(args)...); } #if defined(STAGING) || defined(DEBUG) template inline auline void LogVerboseNoShip(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eVerbose), EAnsiColor::eYellow, "Verbose", line, AuForward(args)...); } #else template inline auline void LogVerboseNoShip(const AuString &line, T&& ... args) {} #endif inline void DoNothing() { } template inline void LogInfo(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eInfo), EAnsiColor::eGreen, "Info", line, AuForward(args)...); } template inline void LogDbg(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eDebug), EAnsiColor::eYellow, "Debug", line, AuForward(args)...); } template inline void LogWarn(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eWarn), EAnsiColor::eRed, "Warn", line, AuForward(args)...); } template inline void LogError(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eError), EAnsiColor::eBoldRed, "Error", line, AuForward(args)...); } template inline void LogGame(const AuString &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eVerbose), EAnsiColor::eBlue, "Game", line, AuForward(args)...); } #else static void LogVerbose(const AuString &line) { WriteLine(static_cast(ELogLevel::eVerbose), ConsoleMessage(EAnsiColor::eYellow, "Verbose", line)); } #if defined(STAGING) || defined(DEBUG) static void LogVerboseNoShip(const AuString &line) { WriteLine(static_cast(ELogLevel::eVerbose), ConsoleMessage(EAnsiColor::eYellow, "Verbose", line)); } #else #define LogVerboseNoShip(...) DoNothing() #endif static void DoNothing() { } static void LogInfo(const AuString &line) { WriteLine(static_cast(ELogLevel::eInfo), ConsoleMessage(EAnsiColor::eGreen, "Info", line)); } static void LogDbg(const AuString &line) { WriteLine(static_cast(ELogLevel::eDebug), ConsoleMessage(EAnsiColor::eYellow, "Debug", line)); } static void LogWarn(const AuString &line) { WriteLine(static_cast(ELogLevel::eWarn), ConsoleMessage(EAnsiColor::eRed, "Warn", line)); } static void LogError(const AuString &line) { WriteLine(static_cast(ELogLevel::eError), ConsoleMessage(EAnsiColor::eBoldRed, "Error", line)); } static void LogGame(const AuString &line) { WriteLine(static_cast(ELogLevel::eGame), ConsoleMessage(EAnsiColor::eBlue, "Game", line)); } #endif } #define ADD_AU_GLOBAL_ALIAS(level)\ template \ static void AuLog ## level(T&& ... args) \ { \ Aurora::Console::Logging::Log ## level(AuForward(args)...); \ } ADD_AU_GLOBAL_ALIAS(Info) ADD_AU_GLOBAL_ALIAS(Dbg) ADD_AU_GLOBAL_ALIAS(Warn) ADD_AU_GLOBAL_ALIAS(Error) ADD_AU_GLOBAL_ALIAS(Game) ADD_AU_GLOBAL_ALIAS(Verbose) #if defined(STAGING) || defined(DEBUG) ADD_AU_GLOBAL_ALIAS(VerboseNoShip) #else #define AuLogVerboseNoShip(...) #endif