flogger.h
### flogger.h
#pragma once
#include <cstdarg>
namespace flogger {
enum class log_level {
trace = 0,
debug = 1,
info = 2,
error = 3,
off = 4
};
void set_log_level(log_level lvl);
log_level get_log_level();
void reset_timer();
void set_time_enabled(bool v);
bool is_time_enabled();
struct logger {
const char* program;
void error(const char* file, const char* func, int line, const char* fmt, ...) const;
void info(const char* file, const char* func, int line, const char* fmt, ...) const;
void debug(const char* file, const char* func, int line, const char* fmt, ...) const;
void trace(const char* file, const char* func, int line, const char* fmt, ...) const;
};
logger bind_error(const char* log_section);
logger bind_info(const char* log_section);
logger bind_debug(const char* log_section);
logger bind_trace(const char* log_section);
}
#define fprint_error(ctx, fmt, ...) (ctx).error(__FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)
#define fprint_info(ctx, fmt, ...) (ctx).info(__FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)
#define fprint_debug(ctx, fmt, ...) (ctx).debug(__FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)
#define fprint_trace(ctx, fmt, ...) (ctx).trace(__FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)