/*** 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 "IIPCLogger.hpp" #include "Sinks.hpp" namespace Aurora::Logging { /// Writes a log message to the console subscribers and telemetry sinks AUKN_SYM void WriteLine(AuUInt8 level, const Console::ConsoleMessage &msg); /** * @brief Overloads the ILogger backend of the AuLogXX functions * @param defaultGlobalLogger * @return */ AUKN_SYM void SetGlobalLogger(const AuSPtr &defaultGlobalLogger); #if defined(_AUHAS_FMT) template inline void WriteLinef(AuUInt8 level, const AuString &tag, const Line_t &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 Line_t &msg, T&& ... args) { WriteLine(level, ConsoleMessage(color, tag, fmt::format(msg, AuForward(args)...))); } template inline void LogVerbose(const Line_t &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 Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eVerbose), EAnsiColor::eYellow, "Verbose", line, AuForward(args)...); } #else template inline auline void LogVerboseNoShip(const Line_t &line, T&& ... args) {} #endif inline void DoNothing() { } template inline void LogInfo(const Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eInfo), EAnsiColor::eGreen, "Info", line, AuForward(args)...); } template inline void LogDbg(const Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eDebug), EAnsiColor::eYellow, "Debug", line, AuForward(args)...); } template inline void LogWarn(const Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eWarn), EAnsiColor::eRed, "Warn", line, AuForward(args)...); } template inline void LogError(const Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eError), EAnsiColor::eBoldRed, "Error", line, AuForward(args)...); } template inline void LogGame(const Line_t &line, T&& ... args) { WriteLinef(static_cast(ELogLevel::eVerbose), EAnsiColor::eBlue, "Game", line, AuForward(args)...); } #else static void LogVerbose(const Line_t &line) { WriteLine(static_cast(ELogLevel::eVerbose), ConsoleMessage(EAnsiColor::eYellow, "Verbose", line)); } #if defined(STAGING) || defined(DEBUG) static void LogVerboseNoShip(const Line_t &line) { WriteLine(static_cast(ELogLevel::eVerbose), ConsoleMessage(EAnsiColor::eYellow, "Verbose", line)); } #else #define LogVerboseNoShip(...) DoNothing() #endif static void DoNothing() { } template static void LogInfo(const Line_t &line) { WriteLine(static_cast(ELogLevel::eInfo), ConsoleMessage(EAnsiColor::eGreen, "Info", line)); } template static void LogDbg(const Line_t &line) { WriteLine(static_cast(ELogLevel::eDebug), ConsoleMessage(EAnsiColor::eYellow, "Debug", line)); } template static void LogWarn(const Line_t &line) { WriteLine(static_cast(ELogLevel::eWarn), ConsoleMessage(EAnsiColor::eRed, "Warn", line)); } template static void LogError(const Line_t &line) { WriteLine(static_cast(ELogLevel::eError), ConsoleMessage(EAnsiColor::eBoldRed, "Error", line)); } template static void LogGame(const Line_t &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::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 #undef ADD_AU_GLOBAL_ALIAS