28#define OPENDHT_LOG true
38inline void NOLOG(
char const*, va_list) {}
50 func = std::forward<LogMethod>(l.func);
59 explicit LogMethod(T&& t) : func(std::forward<T>(t)) {}
64 void operator()(
char const* format, ...)
const {
66 va_start(args, format);
70 void log(
char const* format, va_list args)
const {
73 explicit operator bool()
const {
77 void logPrintable(
const uint8_t *buf,
size_t buflen)
const {
78 std::string buf_clean(buflen,
'\0');
79 for (
size_t i=0; i<buflen; i++)
80 buf_clean[i] = isprint(buf[i]) ? buf[i] :
'.';
81 (*this)(
"%s", buf_clean.c_str());
84 std::function<void(
char const*, va_list)> func;
93 filterEnable_ =
static_cast<bool>(filter_);
95 inline void log0(
const LogMethod& logger,
char const* format, va_list args)
const {
97 if (logger and not filterEnable_)
98 logger.log(format, args);
101 inline void log1(
const LogMethod& logger,
const InfoHash& f,
char const* format, va_list args)
const {
103 if (logger and (not filterEnable_ or f == filter_))
104 logger.log(format, args);
107 inline void log2(
const LogMethod& logger,
const InfoHash& f1,
const InfoHash& f2,
char const* format, va_list args)
const {
109 if (logger and (not filterEnable_ or f1 == filter_ or f2 == filter_))
110 logger.log(format, args);
113 inline void d(
char const* format, ...)
const {
116 va_start(args, format);
117 log0(DEBUG, format, args);
121 inline void d(
const InfoHash& f,
char const* format, ...)
const {
124 va_start(args, format);
125 log1(DEBUG, f, format, args);
129 inline void d(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
132 va_start(args, format);
133 log2(DEBUG, f1, f2, format, args);
137 inline void w(
char const* format, ...)
const {
140 va_start(args, format);
141 log0(WARN, format, args);
145 inline void w(
const InfoHash& f,
char const* format, ...)
const {
148 va_start(args, format);
149 log1(WARN, f, format, args);
153 inline void w(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
156 va_start(args, format);
157 log2(WARN, f1, f2, format, args);
161 inline void e(
char const* format, ...)
const {
164 va_start(args, format);
165 log0(ERR, format, args);
169 inline void e(
const InfoHash& f,
char const* format, ...)
const {
172 va_start(args, format);
173 log1(ERR, f, format, args);
177 inline void e(
const InfoHash& f1,
const InfoHash& f2,
char const* format, ...)
const {
180 va_start(args, format);
181 log2(ERR, f1, f2, format, args);
186 bool filterEnable_ {
false};
void NOLOG(char const *, va_list)