27#include <sys/syscall.h>
35const char*
Labels[] = {
"NONE",
"CRIT",
"ERROR",
"WARN",
"METRIC",
"NOTICE",
"INFO",
"DEBUG"};
43 bool init_done =
false;
64class NullLogger
final :
public Logger {
66 size_t )
noexcept override
71class StdLogger
final :
public Logger {
73 size_t size)
noexcept override
86 size_t hlen{
strftime(head,
sizeof(head),
"%Y/%m/%d %H:%M:%S", &
tm)};
105class SysLogger
final :
public Logger {
107 size_t size)
noexcept override
134 syslog(
prio,
"%.*s",
static_cast<int>(
size),
static_cast<const char*
>(msg.get()));
208 write_all_messages();
211void AsyncLogger::write_all_messages()
221 write_all_messages();
222 std::this_thread::sleep_for(50
ms);
224 return (!tq_.empty() || !stop_);
233 size_t size)
noexcept
236 if (
void*
msg_ptr = msg.release();
237 !tq_.push(Task{.ts = ts, .level = level, .tid = tid, .msg =
msg_ptr, .size =
size})) {