Xyris  0.5
Logger.hpp
Go to the documentation of this file.
1 /**
2  * @file Logger.hpp
3  * @author Keeton Feavel ([email protected])
4  * @brief
5  * @version 0.1
6  * @date 2022-01-21
7  *
8  * @copyright Copyright the Xyris Contributors (c) 2022
9  *
10  */
11 #pragma once
12 #include <stdarg.h>
13 #include <Locking/Mutex.hpp>
14 #include <Locking/RAII.hpp>
15 
16 class Logger
17 {
18 public:
19 
20 enum LogLevel {
28 };
29 
30 typedef int (*LogWriter)(const char* fmt, va_list args);
31 
32 Logger(Logger const&) = delete;
33 void operator=(Logger const&) = delete;
34 
35 [[gnu::format(printf, 2, 3)]] static void Trace(const char* tag, const char* fmt, ...);
36 [[gnu::format(printf, 2, 3)]] static void Verbose(const char* tag, const char* fmt, ...);
37 [[gnu::format(printf, 2, 3)]] static void Debug(const char* tag, const char* fmt, ...);
38 [[gnu::format(printf, 2, 3)]] static void Info(const char* tag, const char* fmt, ...);
39 [[gnu::format(printf, 2, 3)]] static void Warning(const char* tag, const char* fmt, ...);
40 [[gnu::format(printf, 2, 3)]] static void Error(const char* tag, const char* fmt, ...);
41 [[gnu::format(printf, 1, 2)]] static void Print(const char* fmt, ...);
42 
43 static bool addWriter(LogWriter writer);
44 static bool removeWriter(LogWriter writer);
45 static void setLevel(LogLevel level) { the().m_logLevel = level; }
46 static LogLevel getLevel() { return the().m_logLevel; }
47 
48 static Logger& the();
49 
50 private:
51  Logger();
52  const char* levelToString(LogLevel lvl);
53  void LogHelper(const char* tag, LogLevel lvl, const char* fmt, va_list args);
54  void LogHelperPrint(const char* fmt, va_list args);
55 
56  static const uint8_t m_maxWriterCount = 2;
57  static const uint32_t m_maxBufferSize = 1024;
59  size_t m_writersIdx;
63 };
Logger::lVERBOSE
@ lVERBOSE
Definition: Logger.hpp:23
Logger::m_logBufferMutex
Mutex m_logBufferMutex
Definition: Logger.hpp:58
RAII.hpp
Resource Acquisition Is Initialization mutex. Locks when constructed and unlocks when destructed.
Logger::getLevel
static LogLevel getLevel()
Definition: Logger.hpp:46
Logger::LogLevel
LogLevel
Definition: Logger.hpp:20
Logger::m_maxBufferSize
static const uint32_t m_maxBufferSize
Definition: Logger.hpp:57
Logger::LogHelper
void LogHelper(const char *tag, LogLevel lvl, const char *fmt, va_list args)
Definition: Logger.cpp:35
Logger::LogHelperPrint
void LogHelperPrint(const char *fmt, va_list args)
Definition: Logger.cpp:42
Logger::setLevel
static void setLevel(LogLevel level)
Definition: Logger.hpp:45
Logger::Error
static void Error(const char *tag, const char *fmt,...)
Definition: Logger.cpp:101
Logger::m_logBuffer
char m_logBuffer[m_maxBufferSize]
Definition: Logger.hpp:62
Logger::LogWriter
int(* LogWriter)(const char *fmt, va_list args)
Definition: Logger.hpp:30
Logger::lTRACE
@ lTRACE
Definition: Logger.hpp:21
Logger::lDEBUG
@ lDEBUG
Definition: Logger.hpp:22
Logger::Verbose
static void Verbose(const char *tag, const char *fmt,...)
Definition: Logger.cpp:61
Mutex
Definition: Mutex.hpp:16
Logger::Info
static void Info(const char *tag, const char *fmt,...)
Definition: Logger.cpp:81
Logger::m_writers
LogWriter m_writers[m_maxWriterCount]
Definition: Logger.hpp:61
Logger::m_logLevel
LogLevel m_logLevel
Definition: Logger.hpp:60
Logger::addWriter
static bool addWriter(LogWriter writer)
Definition: Logger.cpp:119
Logger::Trace
static void Trace(const char *tag, const char *fmt,...)
Definition: Logger.cpp:51
Logger::Warning
static void Warning(const char *tag, const char *fmt,...)
Definition: Logger.cpp:91
Logger::m_writersIdx
size_t m_writersIdx
Definition: Logger.hpp:59
Console::printf
int printf(const char *fmt,...)
Definition: console.cpp:273
Logger::lINFO
@ lINFO
Definition: Logger.hpp:24
Logger::levelToString
const char * levelToString(LogLevel lvl)
Definition: Logger.cpp:15
Logger::Print
static void Print(const char *fmt,...)
Definition: Logger.cpp:111
Logger::the
static Logger & the()
Definition: Logger.cpp:141
Logger::Debug
static void Debug(const char *tag, const char *fmt,...)
Definition: Logger.cpp:71
Logger::lNone
@ lNone
Definition: Logger.hpp:27
Logger::Logger
Logger()
Definition: Logger.cpp:147
Logger
Definition: Logger.hpp:16
Logger::operator=
void operator=(Logger const &)=delete
Mutex.hpp
Logger::removeWriter
static bool removeWriter(LogWriter writer)
Definition: Logger.cpp:129
Logger::lWARNING
@ lWARNING
Definition: Logger.hpp:25
Logger::lERROR
@ lERROR
Definition: Logger.hpp:26
Logger::m_maxWriterCount
static const uint8_t m_maxWriterCount
Definition: Logger.hpp:56