22#include "utils/singleton.hpp"
37enum log_level { Debug = 0, Info, Warn, Error };
57 static log_level
level();
59 friend class singleton_base<
logger>;
71 template <
typename...
Args>
73 std::string_view
role,
74 std::format_string<Args...>
fmt,
76 if (
static_cast<int>(
level) <
static_cast<int>(_level.load())) {
79 const auto message = std::format(
fmt, std::forward<Args>(
args)...);
91 template <
typename...
Args>
93 log(log_level::Debug,
"",
fmt, std::forward<Args>(
args)...);
104 template <
typename...
Args>
106 log(log_level::Info,
"",
fmt, std::forward<Args>(
args)...);
117 template <
typename...
Args>
119 log(log_level::Warn,
"",
fmt, std::forward<Args>(
args)...);
130 template <
typename...
Args>
132 log(log_level::Error,
"",
fmt, std::forward<Args>(
args)...);
135 static void set_filter(
const std::string
filter);
140 void log_impl(log_level
level, std::string_view
role, std::string_view
message);
141 static std::string_view level_to_string(log_level
level);
143 mutable std::mutex _mutex;
144 std::atomic<log_level> _level{log_level::Info};
148#define LOG_LOGGER_CALL(level, role, fmt, ...) \
149 ::roboctrl::logger::instance().log(level, role, fmt __VA_OPT__(, ) __VA_ARGS__)
151#define GET_ROLE (std::string(__FILE__) + ":" + std::to_string(__LINE__) + ":" + __FUNCTION__)
153#define LOG_DEBUG(fmt, ...) LOG_LOGGER_CALL(::roboctrl::log_level::Debug, GET_ROLE, fmt __VA_OPT__(, ) __VA_ARGS__)
154#define LOG_INFO(fmt, ...) LOG_LOGGER_CALL(::roboctrl::log_level::Info, GET_ROLE, fmt __VA_OPT__(, ) __VA_ARGS__)
155#define LOG_WARN(fmt, ...) LOG_LOGGER_CALL(::roboctrl::log_level::Warn, GET_ROLE, fmt __VA_OPT__(, ) __VA_ARGS__)
156#define LOG_ERROR(fmt, ...) LOG_LOGGER_CALL(::roboctrl::log_level::Error, GET_ROLE, fmt __VA_OPT__(, ) __VA_ARGS__)
188 template <
typename...
Args>
201 template <
typename...
Args>
203 log(log_level::Debug,
fmt, std::forward<Args>(
args)...);
213 template <
typename...
Args>
215 log(log_level::Info,
fmt, std::forward<Args>(
args)...);
225 template <
typename...
Args>
227 log(log_level::Warn,
fmt, std::forward<Args>(
args)...);
237 template <
typename...
Args>
239 log(log_level::Error,
fmt, std::forward<Args>(
args)...);
用于提供日志功能的辅助基类 通过CRTP模式实现,要求派生类实现desc()方法以提供描述信息,在继承时传入派生类自身类型作为模板参数。 继承这个类后,派生类可以方便地使用log_debug、log_i...
void log(log_level level, std::format_string< Args... > fmt, Args &&...args) const
输出日志
void log_error(std::format_string< Args... > fmt, Args &&...args) const
输出error日志
void log_debug(std::format_string< Args... > fmt, Args &&...args) const
输出debug日志
void log_warn(std::format_string< Args... > fmt, Args &&...args) const
输出warn日志
void log_info(std::format_string< Args... > fmt, Args &&...args) const
输出info日志
void log_warn(std::format_string< Args... > fmt, Args &&...args)
打印warn日志
void log_error(std::format_string< Args... > fmt, Args &&...args)
打印error日志
static void set_level(log_level level)
设置日志等级
static log_level level()
获取日志等级
void log_debug(std::format_string< Args... > fmt, Args &&...args)
打印debug日志
void log(log_level level, std::string_view role, std::format_string< Args... > fmt, Args &&...args)
日志接口
void log_info(std::format_string< Args... > fmt, Args &&...args)
打印info日志
static logger & instance()
获取单例实例
asio::awaitable< T > awaitable
协程任务类型。
auto desc(const descable auto &owner) -> std::string
获取一个可描述对象的描述信息