10#include "lcf/log_handler.h"
19 void DefaultHandler(LogHandler::Level level, std::string_view message, UserData) {
22 std::cerr <<
"Debug: ";
25 std::cerr <<
"Warning: ";
28 std::cerr <<
"Error: ";
31 assert(
false &&
"Invalid Log Level");
33 std::cerr << message <<
"\n";
43 output_fn = DefaultHandler;
44 output_userdata =
nullptr;
47 output_userdata = userdata;
61 int const result = vsnprintf(buf,
sizeof(buf), fmt, args);
66 return {buf,
static_cast<unsigned int>(result) <
sizeof(buf) ? result :
sizeof(buf)};
70void Debug(
const char* fmt, ...) {
71 if (
static_cast<int>(LogHandler::Level::Debug) >=
static_cast<int>(LogHandler::level)) {
74 auto msg = format_string(fmt, args);
75 LogHandler::output_fn(LogHandler::Level::Debug, msg, LogHandler::output_userdata);
81 if (
static_cast<int>(LogHandler::Level::Warning) >=
static_cast<int>(LogHandler::level)) {
84 auto msg = format_string(fmt, args);
85 LogHandler::output_fn(LogHandler::Level::Warning, msg, LogHandler::output_userdata);
90void Error(
const char* fmt, ...) {
91 if (
static_cast<int>(LogHandler::Level::Error) >=
static_cast<int>(LogHandler::level)) {
94 auto msg = format_string(fmt, args);
95 LogHandler::output_fn(LogHandler::Level::Error, msg, LogHandler::output_userdata);
std::string format_string(char const *fmt, va_list args)
void DefaultHandler(LogHandler::Level level, std::string_view message, UserData)
void SetHandler(LogHandlerFn fn, UserData userdata)
void SetLevel(Level new_level)
void Warning(const char *fmt,...) LIKE_PRINTF
void Error(const char *fmt,...) LIKE_PRINTF
void Debug(const char *fmt,...) LIKE_PRINTF