1 | #include <fmt/core.h> |
2 |
|
3 | #include "ZydecoCommon.hpp" |
4 | #include "Logger.hpp" |
5 |
|
6 | static Logger LOGGER("LOGGER"); |
7 |
|
8 | // static initialize members |
9 | std::ostream *Logger::s_ostream = nullptr; |
10 | Logger::Verbosity Logger::s_maxVerbosity = Logger::DEBUG; |
11 | int Logger::s_loggerNameLongestLen = 0; |
12 |
|
13 |
|
14 | static const char *VERBOSITY_STRINGS[] = { |
15 | "", // DISABLED |
16 | "\e[1;031m[ ERROR ]\e[0m", |
17 | "\e[1;033m[ WARNING ]\e[0m", |
18 | "\e[1;034m[ INFO ]\e[0m", |
19 | "\e[1;035m[ DEBUG ]\e[0m", |
20 | "\e[1;036m[ VERBOSE ]\e[0m", |
21 | "\e[1;037m[ TRACE ]\e[0m", |
22 | }; |
23 |
|
24 | // ctor |
25 | Logger::Logger(std::string logger_name): |
26 | m_loggerName(logger_name), |
27 | m_loggerNameLen(logger_name.length()) |
28 | { |
29 | if (m_loggerNameLen > s_loggerNameLongestLen) { s_loggerNameLongestLen = m_loggerNameLen; } |
30 | } |
31 |
|
32 | // should be called once |
33 | void Logger::InitializeLogging(Verbosity max_verbosity, std::ostream *stream) |
34 | { |
35 | if (stream != nullptr) |
36 | { |
37 | s_maxVerbosity = max_verbosity; |
38 | s_ostream = stream; |
39 |
|
40 | LOGGER.Log(INFO, "Initialized logger with max verbosity {0}", VERBOSITY_STRINGS[max_verbosity]); |
41 | } |
42 | } |
43 |
|
44 | // output debug message |
45 | void Logger::Log(Verbosity verbosity, std::string message) |
46 | { |
47 | if (s_ostream != nullptr && verbosity <= s_maxVerbosity) |
48 | { |
49 | if (s_loggerNameLongestLen != m_loggerNameLongestLen) |
50 | { |
51 | m_loggerNameLongestLen = s_loggerNameLongestLen; |
52 |
|
53 | int left_padding_count = m_loggerNameLongestLen - m_loggerNameLen; |
54 | char left_padding[left_padding_count + 1]; |
55 |
|
56 | for (int i = 0; i < left_padding_count; i++) |
57 | { |
58 | left_padding[i] = ' '; |
59 | } |
60 | left_padding[left_padding_count] = '\0'; |
61 | m_leftPadding = std::string(left_padding); |
62 | } |
63 | *s_ostream << VERBOSITY_STRINGS[verbosity] << m_leftPadding << " \e[090m" << m_loggerName << "\e[0m :: " << message << "\n"; |
64 | } |
65 | } |
66 |
|