delpi  0.0.1
DElta-complete LP solver
Loading...
Searching...
No Matches
logging.h
1
12#pragma once
13
14#include <fmt/core.h> // IWYU pragma: export
15#include <fmt/ostream.h> // IWYU pragma: export
16#include <fmt/ranges.h> // IWYU pragma: export
17
18#define OSTREAM_FORMATTER(type) \
19 template <> \
20 struct fmt::formatter<type> : ostream_formatter {};
21
22#ifndef NLOG
23
24#include <spdlog/logger.h>
25
26#include <memory>
27
28namespace delpi {
29
30enum class LoggerType { OUT, ERR };
31
32std::shared_ptr<spdlog::logger> get_logger(LoggerType logger_type);
33
34} // namespace delpi
35
36#define DELPI_FORMAT(message, ...) fmt::format(message, __VA_ARGS__)
37
38#define DELPI_VERBOSITY_TO_LOG_LEVEL(verbosity) \
39 ((verbosity) == 0 \
40 ? spdlog::level::critical \
41 : ((verbosity) == 1 \
42 ? spdlog::level::err \
43 : ((verbosity) == 2 \
44 ? spdlog::level::warn \
45 : ((verbosity) == 3 \
46 ? spdlog::level::info \
47 : ((verbosity) == 4 ? spdlog::level::debug \
48 : ((verbosity) == 5 ? spdlog::level::trace : spdlog::level::off))))))
49#define DELPI_LOG_INIT_VERBOSITY(verbosity) DELPI_LOG_INIT_LEVEL(DELPI_VERBOSITY_TO_LOG_LEVEL(verbosity))
50#define DELPI_LOG_INIT_LEVEL(level) \
51 do { \
52 ::delpi::get_logger(::delpi::LoggerType::OUT)->set_level(level); \
53 ::delpi::get_logger(::delpi::LoggerType::ERR)->set_level(level); \
54 } while (0)
55#define DELPI_TRACE(msg) ::delpi::get_logger(::delpi::LoggerType::OUT)->trace(msg)
56#define DELPI_TRACE_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::OUT)->trace(msg, __VA_ARGS__)
57#define DELPI_DEBUG(msg) ::delpi::get_logger(::delpi::LoggerType::OUT)->debug(msg)
58#define DELPI_DEBUG_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::OUT)->debug(msg, __VA_ARGS__)
59#define DELPI_INFO(msg) ::delpi::get_logger(::delpi::LoggerType::OUT)->info(msg)
60#define DELPI_INFO_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::OUT)->info(msg, __VA_ARGS__)
61#define DELPI_WARN(msg) ::delpi::get_logger(::delpi::LoggerType::ERR)->warn(msg)
62#define DELPI_WARN_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::ERR)->warn(msg, __VA_ARGS__)
63#define DELPI_ERROR(msg) ::delpi::get_logger(::delpi::LoggerType::ERR)->error(msg)
64#define DELPI_ERROR_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::ERR)->error(msg, __VA_ARGS__)
65#define DELPI_CRITICAL(msg) ::delpi::get_logger(::delpi::LoggerType::ERR)->critical(msg)
66#define DELPI_CRITICAL_FMT(msg, ...) ::delpi::get_logger(::delpi::LoggerType::ERR)->critical(msg, __VA_ARGS__)
67#define DELPI_INFO_ENABLED (::delpi::get_logger(::delpi::LoggerType::OUT)->should_log(spdlog::level::info))
68#define DELPI_TRACE_ENABLED (::delpi::get_logger(::delpi::LoggerType::OUT)->should_log(spdlog::level::trace))
69
70#ifndef NDEBUG
71
72#include <iostream>
73#include <thread>
74
75#define DELPI_DEV(msg) \
76 do { \
77 if (::delpi::get_logger(::delpi::LoggerType::ERR)->should_log(spdlog::level::err)) \
78 fmt::println("[{:%Y-%m-%d %H:%M:%S}] [\033[1m\033[35mDEV\033[0m] [thread {}] " msg "", \
79 std::chrono::system_clock::now(), std::hash<std::thread::id>{}(std::this_thread::get_id())); \
80 std::cout << std::flush; \
81 } while (0)
82#define DELPI_DEV_FMT(msg, ...) \
83 do { \
84 if (::delpi::get_logger(::delpi::LoggerType::ERR)->should_log(spdlog::level::err)) \
85 fmt::println("[{:%Y-%m-%d %H:%M:%S}] [\033[1m\033[35mDEV\033[0m] [thread {}] " msg "", \
86 std::chrono::system_clock::now(), std::hash<std::thread::id>{}(std::this_thread::get_id()), \
87 __VA_ARGS__); \
88 std::cout << std::flush; \
89 } while (0)
90
91#define DELPI_DEV_TRACE(msg) DELPI_DEV(msg)
92#define DELPI_DEV_TRACE_FMT(msg, ...) DELPI_DEV_FMT(msg, __VA_ARGS__)
93#define DELPI_DEV_DEBUG(msg) DELPI_DEV(msg)
94#define DELPI_DEV_DEBUG_FMT(msg, ...) DELPI_DEV_FMT(msg, __VA_ARGS__)
95#else
96#define DELPI_DEV(msg) void(0)
97#define DELPI_DEV_FMT(msg, ...) void(0)
98#define DELPI_DEV_TRACE(msg) DELPI_TRACE(msg)
99#define DELPI_DEV_TRACE_FMT(msg, ...) DELPI_TRACE_FMT(msg, __VA_ARGS__)
100#define DELPI_DEV_DEBUG(msg) DELPI_DEBUG(msg)
101#define DELPI_DEV_DEBUG_FMT(msg, ...) DELPI_DEBUG_FMT(msg, __VA_ARGS__)
102#endif
103
104#else
105
106#define DELPI_FORMAT(message, ...) fmt::format(message, __VA_ARGS__)
107#define DELPI_VERBOSITY_TO_LOG_LEVEL(verbosity) 0
108#define DELPI_LOG_INIT_LEVEL(level) void(0)
109#define DELPI_LOG_INIT_VERBOSITY(verbosity) void(0)
110#define DELPI_TRACE(msg) void(0)
111#define DELPI_TRACE_FMT(msg, ...) void(0)
112#define DELPI_DEBUG(msg) void(0)
113#define DELPI_DEBUG_FMT(msg, ...) void(0)
114#define DELPI_INFO(msg) void(0)
115#define DELPI_INFO_FMT(msg, ...) void(0)
116#define DELPI_WARN(msg) void(0)
117#define DELPI_WARN_FMT(msg, ...) void(0)
118#define DELPI_ERROR(msg) void(0)
119#define DELPI_ERROR_FMT(msg, ...) void(0)
120#define DELPI_CRITICAL(msg) void(0)
121#define DELPI_CRITICAL_FMT(msg, ...) void(0)
122#define DELPI_INFO_ENABLED false
123#define DELPI_TRACE_ENABLED false
124#define DELPI_DEV(msg) void(0)
125#define DELPI_DEV_FMT(msg, ...) void(0)
126#define DELPI_DEV_TRACE(msg) void(0)
127#define DELPI_DEV_TRACE_FMT(msg, ...) void(0)
128#define DELPI_DEV_DEBUG(msg) void(0)
129#define DELPI_DEV_DEBUG_FMT(msg, ...) void(0)
130
131#endif
Global namespace for the delpi library.