8#include <source_location>
14#include <fmt/chrono.h>
46 LogEvent(std::source_location locationIn,
Level levelIn, std::string_view messageIn)
58 std::chrono::time_point<std::chrono::steady_clock>
creationTS;
61 std::string
toJson(std::string_view delim)
63 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
69 "{{\n\"message\": \"{}\",\n\"sourceLocation\": \"{}:{}\",\n\"timeStarted\": "
70 "\"{}\",\n\"duration\": \"{:m}ms\"\n}}{}"
90 std::string sv, [[maybe_unused]]
Level level, [[maybe_unused]] std::string logName =
"NeoN"
114[[noreturn]]
void logFatal(
const std::string& message);
119template<
typename... Args>
120void info(std::string formatString, Args... args)
127template<
typename... Args>
128void warn(std::string formatString, Args... args)
135template<
typename... Args>
136void debug(std::string formatString, Args... args)
152 FatalFormat(
const char* f, std::source_location l = std::source_location::current())
155 FatalFormat(std::string_view f, std::source_location l = std::source_location::current())
158 FatalFormat(
const std::string& f, std::source_location l = std::source_location::current())
165template<
typename... Args>
168 auto message = fmt::format(fmt::runtime(fmtLoc.
fmt), args...);
187 virtual void log(std::string)
const = 0;
193inline void log(std::shared_ptr<BaseLogger> logger,
LogEvent& event, std::string_view delim =
",")
195 if (logger !=
nullptr)
198 auto formattedMessage =
199 logger->getTarget() ==
Target::Console ?
event.message :
event.toJson(delim);
201 logger->log(formattedMessage);
217 void log(std::string sv)
const override;
233 std::shared_ptr<BaseLogger> logger_;
237 void setLogger(
const std::shared_ptr<BaseLogger> logger);
242template<
typename CallClass>
243void setLogger(CallClass& cls, std::shared_ptr<BaseLogger> logger)
245 cls.setLogger(logger);
virtual ~BaseLogger()=default
BaseLogger(Target target)
virtual void log(std::string) const =0
A class to represent a LogEvent.
std::string toJson(std::string_view delim)
convert event to a json string
LogEvent(std::source_location locationIn, Level levelIn, std::string_view messageIn)
std::source_location location
std::chrono::time_point< std::chrono::steady_clock > creationTS
Logger(std::string name, Level level, Target target)
void log(std::string sv) const override
a Logging Mixin class that allows to attach logger to certain classes
void setLogger(const std::shared_ptr< BaseLogger > logger)
std::shared_ptr< const BaseLogger > getLogger() const
bool shouldLog(Level level, std::string logName="NeoN")
Returns whether a message at the given level would actually be emitted by the named logger.
void logFatal(const std::string &message)
void setLogger(CallClass &cls, std::shared_ptr< BaseLogger > logger)
void log(std::shared_ptr< BaseLogger > logger, LogEvent &event, std::string_view delim=",")
convenience function to call log on logger with std::format
void setNeonDefaultPattern()
void info(std::string formatString, Args... args)
convenience function to call spdlogs info with std::format
void error(detail::FatalFormat fmtLoc, Args... args)
Log a fatal formatted message (with the caller's file:line) and abort.
void warn(std::string formatString, Args... args)
convenience function to call spdlogs warn with std::format
void debug(std::string formatString, Args... args)
convenience function to call spdlogs debug with std::format
void logImpl(std::string sv, Level level, std::string logName="NeoN")
const std::string & name(const NeoN::Document &doc)
Retrieves the name of a Document.