@@ -37,9 +37,21 @@ concept loggable = requires(T const &t) {
37
37
t.apply ([]<typename StringType>(StringType, auto const &...) {});
38
38
};
39
39
40
- template <level L, typename ModuleId, typename ... Ts, typename ... TArgs>
40
+ struct default_flavor_t ;
41
+
42
+ template <typename Flavor, typename ... Ts>
43
+ constexpr static auto get_config () -> auto & {
44
+ if constexpr (std::same_as<Flavor, default_flavor_t >) {
45
+ return config<Ts...>;
46
+ } else {
47
+ return config<Flavor, Ts...>;
48
+ }
49
+ }
50
+
51
+ template <typename Flavor, level L, typename ModuleId, typename ... Ts,
52
+ typename ... TArgs>
41
53
static auto log (TArgs &&...args) -> void {
42
- auto &cfg = config< Ts...>;
54
+ auto &cfg = get_config<Flavor, Ts...>() ;
43
55
cfg.logger .template log <L, ModuleId>(std::forward<TArgs>(args)...);
44
56
}
45
57
@@ -66,35 +78,43 @@ using cib_log_module_id_t = typename logging::module_id_t<"default">::type;
66
78
typename logging::module_id_t<S>::type CIB_PRAGMA_SEMI CIB_PRAGMA( \
67
79
diagnostic pop)
68
80
69
- #define CIB_LOG (LEVEL, MSG, ...) \
70
- logging::log<LEVEL, cib_log_module_id_t >( \
71
- __FILE__, __LINE__, sc::formatter{MSG##_sc}(__VA_ARGS__))
72
-
73
- #define CIB_TRACE (...) CIB_LOG(logging::level::TRACE, __VA_ARGS__)
74
- #define CIB_INFO (...) CIB_LOG(logging::level::INFO, __VA_ARGS__)
75
- #define CIB_WARN (...) CIB_LOG(logging::level::WARN, __VA_ARGS__)
76
- #define CIB_ERROR (...) CIB_LOG(logging::level::ERROR, __VA_ARGS__)
81
+ #define CIB_LOG (FLAVOR, LEVEL, MSG, ...) \
82
+ logging::log<FLAVOR, LEVEL, cib_log_module_id_t >( \
83
+ __FILE__, __LINE__, sc::format(MSG##_sc __VA_OPT__ (, ) __VA_ARGS__))
84
+
85
+ #define CIB_TRACE (...) \
86
+ CIB_LOG (logging::default_flavor_t , logging::level::TRACE, __VA_ARGS__)
87
+ #define CIB_INFO (...) \
88
+ CIB_LOG (logging::default_flavor_t , logging::level::INFO, __VA_ARGS__)
89
+ #define CIB_WARN (...) \
90
+ CIB_LOG (logging::default_flavor_t , logging::level::WARN, __VA_ARGS__)
91
+ #define CIB_ERROR (...) \
92
+ CIB_LOG (logging::default_flavor_t , logging::level::ERROR, __VA_ARGS__)
77
93
#define CIB_FATAL (...) \
78
- (CIB_LOG(logging::level::FATAL, __VA_ARGS__), STDX_PANIC(__VA_ARGS__))
94
+ (CIB_LOG(logging::default_flavor_t , logging::level::FATAL, __VA_ARGS__), \
95
+ STDX_PANIC (__VA_ARGS__))
79
96
80
97
#define CIB_ASSERT (expr ) \
81
98
((expr) ? void (0 ) : CIB_FATAL(" Assertion failure: " #expr))
82
99
83
100
namespace logging {
84
- template <typename ... Ts> static auto log_version () -> void {
85
- auto &l_cfg = config< Ts...>;
101
+ template <typename Flavor, typename ... Ts> static auto log_version () -> void {
102
+ auto &l_cfg = get_config<Flavor, Ts...>() ;
86
103
auto &v_cfg = ::version::config<Ts...>;
87
104
if constexpr (requires {
88
105
l_cfg.logger .template log_build <v_cfg.build_id ,
89
106
v_cfg.version_string >();
90
107
}) {
91
108
l_cfg.logger .template log_build <v_cfg.build_id , v_cfg.version_string >();
92
109
} else {
93
- CIB_LOG (level::MAX, " Version: {} ({})" , sc::uint_<v_cfg.build_id >,
94
- stdx::ct_string_to_type<v_cfg.version_string ,
95
- sc::string_constant>());
110
+ l_cfg.logger .template log <level::MAX, cib_log_module_id_t >(
111
+ " " , 0 ,
112
+ sc::format (" Version: {} ({})" _sc, sc::uint_<v_cfg.build_id >,
113
+ stdx::ct_string_to_type<v_cfg.version_string ,
114
+ sc::string_constant>()));
96
115
}
97
116
}
98
117
} // namespace logging
99
118
100
- #define CIB_LOG_VERSION () logging::log_version()
119
+ #define CIB_LOG_V (FLAVOR ) logging::log_version<FLAVOR>()
120
+ #define CIB_LOG_VERSION () CIB_LOG_V(logging::default_flavor_t )
0 commit comments