16 inline spdlog::logger::logger(std::string logger_name,
const It &begin,
const It &end)
17 : _name(
std::move(logger_name))
19 , _formatter(
std::make_shared<pattern_formatter>(
"%+"))
21 , _flush_level(level::off)
25 _err_handler = [
this](
const std::string &msg) { this->_default_err_handler(msg); };
29 inline spdlog::logger::logger(
const std::string &logger_name, sinks_init_list sinks_list)
30 : logger(logger_name, sinks_list.begin(), sinks_list.end())
35 inline spdlog::logger::logger(
const std::string &logger_name, spdlog::sink_ptr single_sink)
36 : logger(logger_name, {std::move(single_sink)})
40 inline spdlog::logger::~logger() =
default;
42 inline void spdlog::logger::set_formatter(spdlog::formatter_ptr msg_formatter)
44 _set_formatter(std::move(msg_formatter));
47 inline void spdlog::logger::set_pattern(
const std::string &pattern, pattern_time_type pattern_time)
49 _set_pattern(pattern, pattern_time);
52 template<
typename... Args>
53 inline void spdlog::logger::log(level::level_enum lvl,
const char *
fmt,
const Args &... args)
62 details::log_msg log_msg(&_name, lvl);
64 #if defined(SPDLOG_FMT_PRINTF) 65 fmt::printf(log_msg.raw, fmt, args...);
67 log_msg.raw.write(fmt, args...);
71 SPDLOG_CATCH_AND_HANDLE
74 template<
typename... Args>
75 inline void spdlog::logger::log(level::level_enum lvl,
const char *msg)
83 details::log_msg log_msg(&_name, lvl);
87 SPDLOG_CATCH_AND_HANDLE
91 inline void spdlog::logger::log(level::level_enum lvl,
const T &msg)
99 details::log_msg log_msg(&_name, lvl);
103 SPDLOG_CATCH_AND_HANDLE
106 template<
typename Arg1,
typename... Args>
107 inline void spdlog::logger::trace(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
109 log(level::trace, fmt, arg1, args...);
112 template<
typename Arg1,
typename... Args>
113 inline void spdlog::logger::debug(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
115 log(level::debug, fmt, arg1, args...);
118 template<
typename Arg1,
typename... Args>
119 inline void spdlog::logger::info(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
121 log(level::info, fmt, arg1, args...);
124 template<
typename Arg1,
typename... Args>
125 inline void spdlog::logger::warn(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
127 log(level::warn, fmt, arg1, args...);
130 template<
typename Arg1,
typename... Args>
131 inline void spdlog::logger::error(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
133 log(level::err, fmt, arg1, args...);
136 template<
typename Arg1,
typename... Args>
137 inline void spdlog::logger::critical(
const char *fmt,
const Arg1 &arg1,
const Args &... args)
139 log(level::critical, fmt, arg1, args...);
143 inline void spdlog::logger::trace(
const T &msg)
145 log(level::trace, msg);
149 inline void spdlog::logger::debug(
const T &msg)
151 log(level::debug, msg);
155 inline void spdlog::logger::info(
const T &msg)
157 log(level::info, msg);
161 inline void spdlog::logger::warn(
const T &msg)
163 log(level::warn, msg);
167 inline void spdlog::logger::error(
const T &msg)
169 log(level::err, msg);
173 inline void spdlog::logger::critical(
const T &msg)
175 log(level::critical, msg);
178 #ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT 182 template<
typename... Args>
183 inline void spdlog::logger::log(level::level_enum lvl,
const wchar_t *msg)
185 std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
187 log(lvl, conv.to_bytes(msg));
190 template<
typename... Args>
191 inline void spdlog::logger::log(level::level_enum lvl,
const wchar_t *fmt,
const Args &... args)
195 wWriter.
write(fmt, args...);
196 log(lvl, wWriter.
c_str());
199 template<
typename... Args>
200 inline void spdlog::logger::trace(
const wchar_t *fmt,
const Args &... args)
202 log(level::trace, fmt, args...);
205 template<
typename... Args>
206 inline void spdlog::logger::debug(
const wchar_t *fmt,
const Args &... args)
208 log(level::debug, fmt, args...);
211 template<
typename... Args>
212 inline void spdlog::logger::info(
const wchar_t *fmt,
const Args &... args)
214 log(level::info, fmt, args...);
217 template<
typename... Args>
218 inline void spdlog::logger::warn(
const wchar_t *fmt,
const Args &... args)
220 log(level::warn, fmt, args...);
223 template<
typename... Args>
224 inline void spdlog::logger::error(
const wchar_t *fmt,
const Args &... args)
226 log(level::err, fmt, args...);
229 template<
typename... Args>
230 inline void spdlog::logger::critical(
const wchar_t *fmt,
const Args &... args)
232 log(level::critical, fmt, args...);
235 #endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT 240 inline const std::string &spdlog::logger::name()
const 245 inline void spdlog::logger::set_level(spdlog::level::level_enum log_level)
247 _level.store(log_level);
250 inline void spdlog::logger::set_error_handler(spdlog::log_err_handler err_handler)
252 _err_handler = std::move(err_handler);
255 inline spdlog::log_err_handler spdlog::logger::error_handler()
260 inline void spdlog::logger::flush_on(level::level_enum log_level)
262 _flush_level.store(log_level);
265 inline spdlog::level::level_enum spdlog::logger::level()
const 267 return static_cast<spdlog::level::level_enum
>(_level.load(std::memory_order_relaxed));
270 inline bool spdlog::logger::should_log(spdlog::level::level_enum msg_level)
const 272 return msg_level >= _level.load(std::memory_order_relaxed);
278 inline void spdlog::logger::_sink_it(details::log_msg &msg)
280 #if defined(SPDLOG_ENABLE_MESSAGE_COUNTER) 281 _incr_msg_counter(msg);
283 _formatter->format(msg);
284 for (
auto &sink : _sinks)
286 if (sink->should_log(msg.level))
292 if (_should_flush_on(msg))
298 inline void spdlog::logger::_set_pattern(
const std::string &pattern, pattern_time_type pattern_time)
300 _formatter = std::make_shared<pattern_formatter>(pattern, pattern_time);
303 inline void spdlog::logger::_set_formatter(formatter_ptr msg_formatter)
305 _formatter = std::move(msg_formatter);
308 inline void spdlog::logger::flush()
312 for (
auto &sink : _sinks)
317 SPDLOG_CATCH_AND_HANDLE
320 inline void spdlog::logger::_default_err_handler(
const std::string &msg)
322 auto now = time(
nullptr);
323 if (now - _last_err_time < 60)
327 _last_err_time = now;
328 auto tm_time = details::os::localtime(now);
330 std::strftime(date_buf,
sizeof(date_buf),
"%Y-%m-%d %H:%M:%S", &tm_time);
331 fmt::print(stderr,
"[*** LOG ERROR ***] [{}] [{}] {}\n", date_buf, name(), msg);
334 inline bool spdlog::logger::_should_flush_on(
const details::log_msg &msg)
336 const auto flush_level = _flush_level.load(std::memory_order_relaxed);
337 return (msg.level >= flush_level) && (msg.level != level::off);
340 inline void spdlog::logger::_incr_msg_counter(details::log_msg &msg)
342 msg.msg_id = _msg_counter.fetch_add(1, std::memory_order_relaxed);
345 inline const std::vector<spdlog::sink_ptr> &spdlog::logger::sinks()
const const Char * c_str() const
Definition: format.h:3289
void write(BasicCStringRef< Char > format, ArgList args)
Definition: format.h:3332
Definition: format.h:3924