39struct OPENDHT_PUBLIC Logger {
42 : logger(std::move(l)) {
44 throw std::invalid_argument{
"logger and loggerf must be set"};
46 void setFilter(
const InfoHash& f) {
48 filterEnable_ =
static_cast<bool>(filter_);
50 inline void log0(LogLevel level, fmt::string_view format, fmt::printf_args args)
const {
51 if (not filterEnable_)
52 logger(level, fmt::vsprintf(format, args));
54 inline void log1(LogLevel level,
const InfoHash& f, fmt::string_view format, fmt::printf_args args)
const {
55 if (not filterEnable_ or f == filter_)
56 logger(level, fmt::vsprintf(format, args));
58 inline void log2(LogLevel level,
const InfoHash& f1,
const InfoHash& f2, fmt::string_view format, fmt::printf_args args)
const {
59 if (not filterEnable_ or f1 == filter_ or f2 == filter_)
60 logger(level, fmt::vsprintf(format, args));
62 template<
typename S,
typename... Args>
63 inline void debug(S&& format, Args&&... args)
const {
64 logger(LogLevel::debug, fmt::format(format, args...));
66 template<
typename S,
typename... Args>
67 inline void warn(S&& format, Args&&... args)
const {
68 logger(LogLevel::warning, fmt::format(format, args...));
70 template<
typename S,
typename... Args>
71 inline void error(S&& format, Args&&... args)
const {
72 logger(LogLevel::error, fmt::format(format, args...));
74 template <
typename... T>
75 inline void d(fmt::format_string<T...> format, T&&... args)
const {
76 log0(LogLevel::debug, format, fmt::make_printf_args(args...));
78 template <
typename... T>
79 inline void d(
const InfoHash& f, fmt::format_string<T...> format, T&&... args)
const {
80 log1(LogLevel::debug, f, format, fmt::make_printf_args(args...));
82 template <
typename... T>
83 inline void d(
const InfoHash& f1,
const InfoHash& f2, fmt::format_string<T...> format, T&&... args)
const {
84 log2(LogLevel::debug, f1, f2, format, fmt::make_printf_args(args...));
86 template <
typename... T>
87 inline void w(fmt::format_string<T...> format, T&&... args)
const {
88 log0(LogLevel::warning, format, fmt::make_printf_args(args...));
90 template <
typename... T>
91 inline void w(
const InfoHash& f, fmt::format_string<T...> format, T&&... args)
const {
92 log1(LogLevel::warning, f, format, fmt::make_printf_args(args...));
94 template <
typename... T>
95 inline void w(
const InfoHash& f1,
const InfoHash& f2, fmt::format_string<T...> format, T&&... args)
const {
96 log2(LogLevel::warning, f1, f2, format, fmt::make_printf_args(args...));
98 template <
typename... T>
99 inline void e(fmt::format_string<T...> format, T&&... args)
const {
100 log0(LogLevel::error, format, fmt::make_printf_args(args...));
102 template <
typename... T>
103 inline void e(
const InfoHash& f, fmt::format_string<T...> format, T&&... args)
const {
104 log1(LogLevel::error, f, format, fmt::make_printf_args(args...));
106 template <
typename... T>
107 inline void e(
const InfoHash& f1,
const InfoHash& f2, fmt::format_string<T...> format, T&&... args)
const {
108 log2(LogLevel::error, f1, f2, format, fmt::make_printf_args(args...));
111 LogMethod logger = {};
112 bool filterEnable_ {
false};