mitteLib
Toggle main menu visibility
Loading...
Searching...
No Matches
log.hpp
Go to the documentation of this file.
1
//
2
// Created by spak on 03/09/24.
3
//
4
5
#ifndef LOG_HPP
6
#define LOG_HPP
7
8
#include <string_view>
9
#include <vector>
10
11
#ifdef ESP_PLATFORM
12
13
#include <esp_log.h>
14
15
namespace
mlab
{
16
enum struct
log_level
:
int
{
17
none
=
static_cast<
int
>
(ESP_LOG_NONE),
18
error
=
static_cast<
int
>
(ESP_LOG_ERROR),
19
warn
=
static_cast<
int
>
(ESP_LOG_WARN),
20
info
=
static_cast<
int
>
(ESP_LOG_INFO),
21
debug
=
static_cast<
int
>
(ESP_LOG_DEBUG),
22
verbose
=
static_cast<
int
>
(ESP_LOG_VERBOSE)
23
};
24
}
25
26
#define LOGE ESP_LOGE
27
#define LOGW ESP_LOGW
28
#define LOGI ESP_LOGI
29
#define LOGD ESP_LOGD
30
#define LOGV ESP_LOGV
31
32
#define LOGE_BUFFER_HEX(tag, buffer, buff_len) ESP_LOG_BUFFER_HEX_LEVEL(tag, buffer, buff_len, ESP_LOG_ERROR)
33
#define LOGW_BUFFER_HEX(tag, buffer, buff_len) ESP_LOG_BUFFER_HEX_LEVEL(tag, buffer, buff_len, ESP_LOG_WARN)
34
#define LOGI_BUFFER_HEX(tag, buffer, buff_len) ESP_LOG_BUFFER_HEX_LEVEL(tag, buffer, buff_len, ESP_LOG_INFO)
35
#define LOGD_BUFFER_HEX(tag, buffer, buff_len) ESP_LOG_BUFFER_HEX_LEVEL(tag, buffer, buff_len, ESP_LOG_DEBUG)
36
#define LOGV_BUFFER_HEX(tag, buffer, buff_len) ESP_LOG_BUFFER_HEX_LEVEL(tag, buffer, buff_len, ESP_LOG_VERBOSE)
37
38
#else
39
40
#include <chrono>
41
#include <cstdio>
42
43
namespace
mlab
{
44
[[nodiscard]] std::uint32_t
log_timestamp
();
45
46
enum struct
log_level
:
int
{
47
none
,
48
error
,
49
warn
,
50
info
,
51
debug
,
52
verbose
53
};
54
55
void
log_buffer
(
const
char
*format, std::uint32_t timestamp,
void
const
*buffer, std::size_t buffer_length);
56
}
// namespace mlab
57
58
#define MLAB_LOG_COLOR_E "\033[0;31m"
59
#define MLAB_LOG_COLOR_W "\033[0;33m"
60
#define MLAB_LOG_COLOR_I "\033[0;32m"
61
#define MLAB_LOG_COLOR_D
62
#define MLAB_LOG_COLOR_V
63
#define MLAB_LOG_RESET_COLOR "\033[0m"
64
#define MLAB_LOG_FORMAT(letter, format) MLAB_LOG_COLOR_##letter #letter " (%u) %s: " format MLAB_LOG_RESET_COLOR "\n"
65
66
#ifndef LOG_LOCAL_LEVEL
67
#define LOG_LOCAL_LEVEL mlab::log_level::info
68
#endif
69
70
71
#define LOG_LEVEL(level, tag, format, letter, ...) \
72
do { \
73
if (static_cast<int>(LOG_LOCAL_LEVEL) >= static_cast<int>(level) and \
74
::mlab::check_log_level(tag, static_cast<::mlab::log_level>(level))) \
75
std::printf((MLAB_LOG_FORMAT(letter, format)), ::mlab::log_timestamp(), tag, ##__VA_ARGS__); \
76
} while (false)
77
78
#define LOGE(tag, format, ...) LOG_LEVEL(mlab::log_level::error, tag, format, E, ##__VA_ARGS__)
79
#define LOGW(tag, format, ...) LOG_LEVEL(mlab::log_level::warn, tag, format, W, ##__VA_ARGS__)
80
#define LOGI(tag, format, ...) LOG_LEVEL(mlab::log_level::info, tag, format, I, ##__VA_ARGS__)
81
#define LOGD(tag, format, ...) LOG_LEVEL(mlab::log_level::debug, tag, format, D, ##__VA_ARGS__)
82
#define LOGV(tag, format, ...) LOG_LEVEL(mlab::log_level::verbose, tag, format, V, ##__VA_ARGS__)
83
84
#define LOG_BUFFER_HEX_LEVEL(level, letter, tag, buffer, buff_len) \
85
do { \
86
if (static_cast<int>(LOG_LOCAL_LEVEL) >= static_cast<int>(level) and \
87
::mlab::check_log_level(tag, static_cast<::mlab::log_level>(level))) \
88
::mlab::log_buffer(MLAB_LOG_FORMAT(letter, "%s"), buffer, buff_len, ::mlab::log_timestamp()); \
89
} while (false)
90
91
#define LOGE_BUFFER_HEX(tag, buffer, buff_len) LOG_BUFFER_HEX_LEVEL(mlab::log_level::error, E, tag, buffer, buff_len)
92
#define LOGW_BUFFER_HEX(tag, buffer, buff_len) LOG_BUFFER_HEX_LEVEL(mlab::log_level::warn, W, tag, buffer, buff_len)
93
#define LOGI_BUFFER_HEX(tag, buffer, buff_len) LOG_BUFFER_HEX_LEVEL(mlab::log_level::info, I, tag, buffer, buff_len)
94
#define LOGD_BUFFER_HEX(tag, buffer, buff_len) LOG_BUFFER_HEX_LEVEL(mlab::log_level::debug, D, tag, buffer, buff_len)
95
#define LOGV_BUFFER_HEX(tag, buffer, buff_len) LOG_BUFFER_HEX_LEVEL(mlab::log_level::verbose, V, tag, buffer, buff_len)
96
97
#endif
98
99
namespace
mlab
{
100
101
void
set_log_level
(std::string_view tag,
log_level
level);
102
[[nodiscard]]
log_level
get_log_level
(std::string_view tag);
103
[[nodiscard]]
bool
check_log_level
(std::string_view tag,
log_level
level);
104
111
struct
suppress_log
{
115
std::vector<std::pair<const char *, log_level>>
tag_log_lev
{};
116
120
log_level
min_level
=
log_level::none
;
121
125
bool
is_suppressed
=
false
;
126
130
suppress_log
() =
default
;
131
136
suppress_log
(std::initializer_list<const char *> tags);
137
143
suppress_log
(
log_level
min_level
, std::initializer_list<const char *> tags);
144
149
suppress_log
(
suppress_log
const
&) =
delete
;
150
suppress_log
(
suppress_log
&&other)
noexcept
;
151
152
suppress_log
&
operator=
(
suppress_log
const
&other) =
delete
;
153
suppress_log
&
operator=
(
suppress_log
&&other)
noexcept
;
157
161
void
suppress
();
162
166
void
restore
();
167
171
~suppress_log
();
172
};
173
174
[[nodiscard]]
constexpr
std::strong_ordering
operator<=>
(
log_level
l,
log_level
r) {
175
return
static_cast<
int
>
(l) <=>
static_cast<
int
>
(r);
176
}
177
}
// namespace mlab
178
#endif
//LOG_HPP
mlab
Definition
log.cpp:10
mlab::log_timestamp
std::uint32_t log_timestamp()
Definition
log.cpp:14
mlab::get_log_level
log_level get_log_level(std::string_view tag)
Definition
log.cpp:67
mlab::check_log_level
bool check_log_level(std::string_view tag, log_level level)
Definition
log.cpp:83
mlab::operator<=>
constexpr std::strong_ordering operator<=>(log_level l, log_level r)
Definition
log.hpp:174
mlab::log_level
log_level
Definition
log.hpp:46
mlab::log_level::warn
@ warn
Definition
log.hpp:49
mlab::log_level::verbose
@ verbose
Definition
log.hpp:52
mlab::log_level::none
@ none
Definition
log.hpp:47
mlab::log_level::debug
@ debug
Definition
log.hpp:51
mlab::log_level::info
@ info
Definition
log.hpp:50
mlab::log_level::error
@ error
Definition
log.hpp:48
mlab::log_buffer
void log_buffer(const char *format, std::uint32_t timestamp, void const *buffer, std::size_t buffer_length)
Definition
log.cpp:17
mlab::set_log_level
void set_log_level(std::string_view tag, log_level level)
Definition
log.cpp:75
mlab::suppress_log::is_suppressed
bool is_suppressed
Definition
log.hpp:125
mlab::suppress_log::suppress_log
suppress_log(suppress_log const &)=delete
mlab::suppress_log::restore
void restore()
Definition
log.cpp:116
mlab::suppress_log::~suppress_log
~suppress_log()
Definition
log.cpp:125
mlab::suppress_log::suppress
void suppress()
Definition
log.cpp:107
mlab::suppress_log::tag_log_lev
std::vector< std::pair< const char *, log_level > > tag_log_lev
Definition
log.hpp:115
mlab::suppress_log::min_level
log_level min_level
Definition
log.hpp:120
mlab::suppress_log::operator=
suppress_log & operator=(suppress_log const &other)=delete
mlab::suppress_log::suppress_log
suppress_log()=default
mittelib
include
mlab
log.hpp
Generated by
1.17.0