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 
   87        size_t hlen{
strftime(head, 
sizeof(head), 
"%Y/%m/%d %H:%M:%S", &
tm)};
 
  106class SysLogger 
final : 
public Logger {
 
  108                      size_t size) 
noexcept override 
  209    write_all_messages();
 
 
  212void AsyncLogger::write_all_messages()
 
  222    write_all_messages();
 
  223    std::this_thread::sleep_for(50
ms);
 
  225    return (!tq_.empty() || !stop_);
 
 
  234                               size_t size) 
noexcept 
  236    char* 
const msg_ptr = msg.release();
 
  238        if (tq_.push(Task{.ts = ts, .level = level, .tid = tid, .msg = msg_ptr, .size = size})) {
 
  242    } 
catch (
const std::bad_alloc&) {