IRSOL
C++ code implementing socket server for interacting with Baumer camera.
logging.hpp
Go to the documentation of this file.
1
13#pragma once
14
15#include "irsol/types.hpp"
16
17#include <optional>
18
19// Compile-time log-level (de-)activation
20#ifndef SPDLOG_ACTIVE_LEVEL
21#ifdef DEBUG
22// If not provided externally, if running in debug mode, we allow logging all levels
23#define SPDLOG_ACTIVE_LEVEL 0 // trace
24#else
25// If not provided externally, if running in release mode, we only allow logging to info level and
26// never lower (debug and trace)
27#define SPDLOG_ACTIVE_LEVEL 2 // info
28#endif
29#endif
30
31#include <spdlog/spdlog.h>
32#include <unordered_map>
33
90#define IRSOL_LOG_TRACE(...) SPDLOG_TRACE(__VA_ARGS__)
91#define IRSOL_LOG_DEBUG(...) SPDLOG_DEBUG(__VA_ARGS__)
92#define IRSOL_LOG_INFO(...) SPDLOG_INFO(__VA_ARGS__)
93#define IRSOL_LOG_WARN(...) SPDLOG_WARN(__VA_ARGS__)
94#define IRSOL_LOG_ERROR(...) SPDLOG_ERROR(__VA_ARGS__)
95#define IRSOL_LOG_FATAL(...) SPDLOG_CRITICAL(__VA_ARGS__)
96
97namespace irsol {
98namespace internal {
99
105{
106 std::shared_ptr<spdlog::logger> logger;
108};
109
117{
118public:
127 static spdlog::logger* getLogger(const std::string& name);
128
129private:
130 static std::unordered_map<std::string, LoggerInfo> m_loggers;
131};
132
133} // namespace internal
134} // namespace irsol
135
172#define IRSOL_NAMED_LOG_TRACE(name, ...) \
173 irsol::internal::NamedLoggerRegistry::getLogger(name)->trace(__VA_ARGS__)
174#define IRSOL_NAMED_LOG_DEBUG(name, ...) \
175 irsol::internal::NamedLoggerRegistry::getLogger(name)->debug(__VA_ARGS__)
176#define IRSOL_NAMED_LOG_INFO(name, ...) \
177 irsol::internal::NamedLoggerRegistry::getLogger(name)->info(__VA_ARGS__)
178#define IRSOL_NAMED_LOG_WARN(name, ...) \
179 irsol::internal::NamedLoggerRegistry::getLogger(name)->warn(__VA_ARGS__)
180#define IRSOL_NAMED_LOG_ERROR(name, ...) \
181 irsol::internal::NamedLoggerRegistry::getLogger(name)->error(__VA_ARGS__)
182#define IRSOL_NAMED_LOG_FATAL(name, ...) \
183 irsol::internal::NamedLoggerRegistry::getLogger(name)->critical(__VA_ARGS__)
184
185namespace irsol {
186
192{
193 CONSOLE,
194 FILE,
196};
197
210 std::optional<std::shared_ptr<spdlog::logger>> logger = std::nullopt);
211
221void setSinkLoggingFormat(LoggingFormat format, std::shared_ptr<spdlog::sinks::sink> sink);
222
232void setLoggerName(const char* name);
233
244void initLogging(
245 const char* fileSinkFilename = "logs/irsol.log",
246 std::optional<spdlog::level::level_enum> minLogLevel = std::nullopt);
247
254inline const std::unordered_map<std::string, spdlog::level::level_enum> levelNameToLevelMap = {
255#ifdef DEBUG
256 {"trace", spdlog::level::trace},
257 {"debug", spdlog::level::debug},
258#endif
259 {"info", spdlog::level::info},
260 {"warn", spdlog::level::warn},
261 {"error", spdlog::level::err}};
262} // namespace irsol
Manages a registry of named loggers.
Definition logging.hpp:117
static std::unordered_map< std::string, LoggerInfo > m_loggers
Internal logger registry.
Definition logging.hpp:130
static spdlog::logger * getLogger(const std::string &name)
Retrieves a logger by name from the registry.
Definition logging.cpp:12
LoggingFormat
Enum representing supported logging output formats.
Definition logging.hpp:192
void setSinkLoggingFormat(LoggingFormat format, std::shared_ptr< spdlog::sinks::sink > sink)
Sets the logging format for a specific sink.
Definition logging.cpp:92
void setLoggerName(const char *name)
Sets the name of the default logger.
Definition logging.cpp:77
void initLogging(const char *fileSinkFilename="logs/irsol.log", std::optional< spdlog::level::level_enum > minLogLevel=std::nullopt)
Initializes the irsol logging system.
Definition logging.cpp:108
void setLoggingFormat(LoggingFormat format=LoggingFormat::FILE, std::optional< std::shared_ptr< spdlog::logger > > logger=std::nullopt)
Sets the global logging format.
Definition logging.cpp:84
const std::unordered_map< std::string, spdlog::level::level_enum > levelNameToLevelMap
Runtime map from string names to spdlog log levels.
Definition logging.hpp:254
@ CONSOLE
Human-readable format for terminal output.
@ UNIT_TESTS
Format suitable for unit test frameworks.
@ FILE
Persistent file logging format.
clock_t::time_point timepoint_t
Alias for a point in time as defined by clock_t.
Definition types.hpp:120
Metadata for a named logger instance.
Definition logging.hpp:105
irsol::types::timepoint_t lastRetrieved
Last time this logger was accessed.
Definition logging.hpp:107
std::shared_ptr< spdlog::logger > logger
The spdlog logger instance.
Definition logging.hpp:106
Core type definitions for networking, time handling, and protocol values used throughout the irsol li...