ifm3d
log.h
1
// -*- c++ -*-
2
/*
3
* Copyright 2023-present ifm electronic, gmbh
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
7
#ifndef IFM3D_COMMON_LOGGING_LOG_H
8
#define IFM3D_COMMON_LOGGING_LOG_H
9
10
#include <cstring>
11
12
#include <ifm3d/common/logging/log_entry.h>
13
#include <ifm3d/common/logging/log_level.h>
14
#include <ifm3d/common/logging/logger.h>
15
16
#include <fmt/format.h>
17
18
#ifdef _MSC_VER
19
# define LOG_GET_FUNC() __FUNCTION__
20
#else
21
# define LOG_GET_FUNC() __PRETTY_FUNCTION__
22
#endif
23
24
#ifndef IFM3D_COMMON_LOGGING_STRIP_PREFIX
25
# define IFM3D_COMMON_LOGGING_STRIP_PREFIX ""
26
#endif
27
28
namespace
ifm3d
29
{
30
constexpr std::size_t
31
_log_strlen(
const
char
* str)
32
{
33
std::size_t len = 0;
34
while
(str[len] !=
'\0'
)
35
{
36
++len;
37
}
38
return
len;
39
}
40
41
constexpr
bool
42
_log_starts_with(
const
char
* str,
const
char
* prefix)
43
{
44
std::size_t i = 0;
45
while
(prefix[i] !=
'\0'
)
46
{
47
if
(str[i] != prefix[i])
48
{
49
return
false
;
50
}
51
++i;
52
}
53
return
true
;
54
}
55
56
constexpr
const
char
*
57
_log_strip_prefix(
const
char
* ptr,
const
char
* prefix)
58
{
59
return
_log_starts_with(ptr, prefix) ? ptr + _log_strlen(prefix) : ptr;
60
}
61
}
62
63
// NOLINTNEXTLINE(*-macro-usage)
64
#define LOG_GET_FILE() \
65
::ifm3d::_log_strip_prefix(__FILE__, IFM3D_COMMON_LOGGING_STRIP_PREFIX)
66
// NOLINTNEXTLINE(*-macro-usage)
67
#define LOG_GET_LINE() __LINE__
68
69
// NOLINTNEXTLINE(*-macro-usage,readability-identifier-naming)
70
#define LOG_IF_(condition) \
71
if (!(condition)) \
72
{ \
73
; \
74
} \
75
else
76
77
#define LOG(log_level, msg, ...) \
78
LOG_IF_(::ifm3d::Logger::Get().ShouldLog(log_level)) \
79
{ \
80
::ifm3d::Logger::Get().Write( \
81
::ifm3d::LogEntry(::fmt::format(msg, ##__VA_ARGS__), \
82
log_level, \
83
LOG_GET_FILE(), \
84
LOG_GET_FUNC(), \
85
LOG_GET_LINE())); \
86
}
87
88
#define LOG_VERBOSE(fmt, ...) \
89
LOG(::ifm3d::LogLevel::Verbose, fmt, ##__VA_ARGS__)
90
#define LOG_DEBUG(fmt, ...) LOG(::ifm3d::LogLevel::Debug, fmt, ##__VA_ARGS__)
91
#define LOG_INFO(fmt, ...) LOG(::ifm3d::LogLevel::Info, fmt, ##__VA_ARGS__)
92
#define LOG_WARNING(fmt, ...) \
93
LOG(::ifm3d::LogLevel::Warning, fmt, ##__VA_ARGS__)
94
#define LOG_ERROR(fmt, ...) LOG(::ifm3d::LogLevel::Error, fmt, ##__VA_ARGS__)
95
#define LOG_CRITICAL(fmt, ...) \
96
LOG(::ifm3d::LogLevel::Critical, fmt, ##__VA_ARGS__)
97
98
#endif
// IFM3D_COMMON_LOGGING_LOG_H
ifm3d
common
logging
log.h
Generated by
1.9.1