11 #include "../details/registry.h" 12 #include "../sinks/file_sinks.h" 13 #include "../sinks/stdout_sinks.h" 14 #include "../spdlog.h" 15 #ifdef SPDLOG_ENABLE_SYSLOG 16 #include "../sinks/syslog_sink.h" 19 #if defined _WIN32 && !defined(__cplusplus_winrt) 20 #include "../sinks/wincolor_sink.h" 22 #include "../sinks/ansicolor_sink.h" 26 #include "../sinks/android_sink.h" 34 inline void spdlog::register_logger(std::shared_ptr<logger> logger)
36 return details::registry::instance().register_logger(std::move(logger));
39 inline std::shared_ptr<spdlog::logger> spdlog::get(
const std::string &name)
41 return details::registry::instance().get(name);
44 inline void spdlog::drop(
const std::string &name)
46 details::registry::instance().drop(name);
50 inline std::shared_ptr<spdlog::logger> spdlog::basic_logger_mt(
const std::string &logger_name,
const filename_t &filename,
bool truncate)
52 return create<spdlog::sinks::simple_file_sink_mt>(logger_name, filename, truncate);
55 inline std::shared_ptr<spdlog::logger> spdlog::basic_logger_st(
const std::string &logger_name,
const filename_t &filename,
bool truncate)
57 return create<spdlog::sinks::simple_file_sink_st>(logger_name, filename, truncate);
61 inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_mt(
62 const std::string &logger_name,
const filename_t &filename,
size_t max_file_size,
size_t max_files)
64 return create<spdlog::sinks::rotating_file_sink_mt>(logger_name, filename, max_file_size, max_files);
67 inline std::shared_ptr<spdlog::logger> spdlog::rotating_logger_st(
68 const std::string &logger_name,
const filename_t &filename,
size_t max_file_size,
size_t max_files)
70 return create<spdlog::sinks::rotating_file_sink_st>(logger_name, filename, max_file_size, max_files);
74 inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_mt(
75 const std::string &logger_name,
const filename_t &filename,
int hour,
int minute)
77 return create<spdlog::sinks::daily_file_sink_mt>(logger_name, filename, hour, minute);
80 inline std::shared_ptr<spdlog::logger> spdlog::daily_logger_st(
81 const std::string &logger_name,
const filename_t &filename,
int hour,
int minute)
83 return create<spdlog::sinks::daily_file_sink_st>(logger_name, filename, hour, minute);
89 inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_mt(
const std::string &logger_name)
91 return spdlog::details::registry::instance().create(logger_name, spdlog::sinks::stdout_sink_mt::instance());
94 inline std::shared_ptr<spdlog::logger> spdlog::stdout_logger_st(
const std::string &logger_name)
96 return spdlog::details::registry::instance().create(logger_name, spdlog::sinks::stdout_sink_st::instance());
99 inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_mt(
const std::string &logger_name)
101 return spdlog::details::registry::instance().create(logger_name, spdlog::sinks::stderr_sink_mt::instance());
104 inline std::shared_ptr<spdlog::logger> spdlog::stderr_logger_st(
const std::string &logger_name)
106 return spdlog::details::registry::instance().create(logger_name, spdlog::sinks::stderr_sink_st::instance());
112 #if defined _WIN32 && !defined(__cplusplus_winrt) 114 inline std::shared_ptr<spdlog::logger> spdlog::stdout_color_mt(
const std::string &logger_name)
116 auto sink = std::make_shared<spdlog::sinks::wincolor_stdout_sink_mt>();
117 return spdlog::details::registry::instance().create(logger_name, sink);
120 inline std::shared_ptr<spdlog::logger> spdlog::stdout_color_st(
const std::string &logger_name)
122 auto sink = std::make_shared<spdlog::sinks::wincolor_stdout_sink_st>();
123 return spdlog::details::registry::instance().create(logger_name, sink);
126 inline std::shared_ptr<spdlog::logger> spdlog::stderr_color_mt(
const std::string &logger_name)
128 auto sink = std::make_shared<spdlog::sinks::wincolor_stderr_sink_mt>();
129 return spdlog::details::registry::instance().create(logger_name, sink);
132 inline std::shared_ptr<spdlog::logger> spdlog::stderr_color_st(
const std::string &logger_name)
134 auto sink = std::make_shared<spdlog::sinks::wincolor_stderr_sink_st>();
135 return spdlog::details::registry::instance().create(logger_name, sink);
138 #else // ansi terminal colors 140 inline std::shared_ptr<spdlog::logger> spdlog::stdout_color_mt(
const std::string &logger_name)
142 auto sink = std::make_shared<spdlog::sinks::ansicolor_stdout_sink_mt>();
143 return spdlog::details::registry::instance().create(logger_name, sink);
146 inline std::shared_ptr<spdlog::logger> spdlog::stdout_color_st(
const std::string &logger_name)
148 auto sink = std::make_shared<spdlog::sinks::ansicolor_stdout_sink_st>();
149 return spdlog::details::registry::instance().create(logger_name, sink);
152 inline std::shared_ptr<spdlog::logger> spdlog::stderr_color_mt(
const std::string &logger_name)
154 auto sink = std::make_shared<spdlog::sinks::ansicolor_stderr_sink_mt>();
155 return spdlog::details::registry::instance().create(logger_name, sink);
158 inline std::shared_ptr<spdlog::logger> spdlog::stderr_color_st(
const std::string &logger_name)
160 auto sink = std::make_shared<spdlog::sinks::ansicolor_stderr_sink_st>();
161 return spdlog::details::registry::instance().create(logger_name, sink);
165 #ifdef SPDLOG_ENABLE_SYSLOG 167 inline std::shared_ptr<spdlog::logger> spdlog::syslog_logger(
168 const std::string &logger_name,
const std::string &syslog_ident,
int syslog_option,
int syslog_facility)
170 return create<spdlog::sinks::syslog_sink>(logger_name, syslog_ident, syslog_option, syslog_facility);
175 inline std::shared_ptr<spdlog::logger> spdlog::android_logger(
const std::string &logger_name,
const std::string &tag)
177 return create<spdlog::sinks::android_sink>(logger_name, tag);
182 inline std::shared_ptr<spdlog::logger> spdlog::create(
const std::string &logger_name,
const spdlog::sink_ptr &sink)
184 return details::registry::instance().create(logger_name, sink);
188 inline std::shared_ptr<spdlog::logger> spdlog::create(
const std::string &logger_name, spdlog::sinks_init_list sinks)
190 return details::registry::instance().create(logger_name, sinks);
193 template<
typename Sink,
typename... Args>
194 inline std::shared_ptr<spdlog::logger> spdlog::create(
const std::string &logger_name, Args... args)
196 sink_ptr sink = std::make_shared<Sink>(args...);
197 return details::registry::instance().create(logger_name, {sink});
201 inline std::shared_ptr<spdlog::logger> spdlog::create(
const std::string &logger_name,
const It &sinks_begin,
const It &sinks_end)
203 return details::registry::instance().create(logger_name, sinks_begin, sinks_end);
207 inline std::shared_ptr<spdlog::logger> spdlog::create_async(
const std::string &logger_name,
const sink_ptr &sink,
size_t queue_size,
208 const async_overflow_policy overflow_policy,
const std::function<
void()> &worker_warmup_cb,
209 const std::chrono::milliseconds &flush_interval_ms,
const std::function<
void()> &worker_teardown_cb)
211 return details::registry::instance().create_async(
212 logger_name, queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb, sink);
216 inline std::shared_ptr<spdlog::logger> spdlog::create_async(
const std::string &logger_name, sinks_init_list sinks,
size_t queue_size,
217 const async_overflow_policy overflow_policy,
const std::function<
void()> &worker_warmup_cb,
218 const std::chrono::milliseconds &flush_interval_ms,
const std::function<
void()> &worker_teardown_cb)
220 return details::registry::instance().create_async(
221 logger_name, queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb, sinks);
225 inline std::shared_ptr<spdlog::logger> spdlog::create_async(
const std::string &logger_name,
const It &sinks_begin,
const It &sinks_end,
226 size_t queue_size,
const async_overflow_policy overflow_policy,
const std::function<
void()> &worker_warmup_cb,
227 const std::chrono::milliseconds &flush_interval_ms,
const std::function<
void()> &worker_teardown_cb)
229 return details::registry::instance().create_async(
230 logger_name, queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb, sinks_begin, sinks_end);
233 inline void spdlog::set_formatter(spdlog::formatter_ptr f)
235 details::registry::instance().formatter(std::move(f));
238 inline void spdlog::set_pattern(
const std::string &format_string)
240 return details::registry::instance().set_pattern(format_string);
243 inline void spdlog::set_level(level::level_enum log_level)
245 return details::registry::instance().set_level(log_level);
248 inline void spdlog::flush_on(level::level_enum log_level)
250 return details::registry::instance().flush_on(log_level);
253 inline void spdlog::set_error_handler(log_err_handler handler)
255 return details::registry::instance().set_error_handler(std::move(handler));
258 inline void spdlog::set_async_mode(
size_t queue_size,
const async_overflow_policy overflow_policy,
259 const std::function<
void()> &worker_warmup_cb,
const std::chrono::milliseconds &flush_interval_ms,
260 const std::function<
void()> &worker_teardown_cb)
262 details::registry::instance().set_async_mode(queue_size, overflow_policy, worker_warmup_cb, flush_interval_ms, worker_teardown_cb);
265 inline void spdlog::set_sync_mode()
267 details::registry::instance().set_sync_mode();
270 inline void spdlog::apply_all(std::function<
void(std::shared_ptr<logger>)> fun)
272 details::registry::instance().apply_all(std::move(fun));
275 inline void spdlog::drop_all()
277 details::registry::instance().drop_all();