30#define OPENDHT_LOG true
47 func = std::forward<LogMethod>(l.func);
56 explicit LogMethod(T&& t) : func(std::forward<T>(t)) {}
61 void operator()(
char const* format, ...)
const {
63 va_start(args, format);
67 inline void log(
char const* format, va_list args)
const {
70 explicit operator bool()
const {
74 void logPrintable(
const uint8_t *buf,
size_t buflen)
const {
75 std::string buf_clean(buflen,
'\0');
76 for (
size_t i=0; i<buflen; i++)
77 buf_clean[i] = isprint(buf[i]) ? buf[i] :
'.';
78 (*this)(
"%s", buf_clean.c_str());
81 std::function<void(
char const*, va_list)> func;
91 : ERR(std::move(err)), WARN(std::move(warn)), DBG(std::move(dbg)) {}
94 filterEnable_ =
static_cast<bool>(filter_);
96 inline void log0(
const LogMethod& logger,
char const* format, va_list args)
const {
98 if (logger and not filterEnable_)
99 logger.log(format, args);
102 inline void log1(
const LogMethod& logger,
const InfoHash& f,
char const* format, va_list args)
const {
104 if (logger and (not filterEnable_ or f == filter_))
105 logger.log(format, args);
108 inline void log2(
const LogMethod& logger,
const InfoHash& f1,
const InfoHash& f2,
char const* format, va_list args)
const {
110 if (logger and (not filterEnable_ or f1 == filter_ or f2 == filter_))
111 logger.log(format, args);
114 inline void d(
char const* format, ...)
const {
117 va_start(args, format);
118 log0(DBG, format, args);
122 inline void d(
const InfoHash& f,
char const* format, ...)
const {
125 va_start(args, format);
126 log1(DBG, f, format, args);
130 inline void d(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
133 va_start(args, format);
134 log2(DBG, f1, f2, format, args);
138 inline void w(
char const* format, ...)
const {
141 va_start(args, format);
142 log0(WARN, format, args);
146 inline void w(
const InfoHash& f,
char const* format, ...)
const {
149 va_start(args, format);
150 log1(WARN, f, format, args);
154 inline void w(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
157 va_start(args, format);
158 log2(WARN, f1, f2, format, args);
162 inline void e(
char const* format, ...)
const {
165 va_start(args, format);
166 log0(ERR, format, args);
170 inline void e(
const InfoHash& f,
char const* format, ...)
const {
173 va_start(args, format);
174 log1(ERR, f, format, args);
178 inline void e(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
181 va_start(args, format);
182 log2(ERR, f1, f2, format, args);
187 bool filterEnable_ {
false};