Photon 1.0.0
Loading...
Searching...
No Matches
spdlog.h
Go to the documentation of this file.
1// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
2// Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
4// spdlog main header file.
5// see example.cpp for usage example
6
7#ifndef SPDLOG_H
8#define SPDLOG_H
9
10#pragma once
11
12#include <spdlog/common.h>
14#include <spdlog/logger.h>
15#include <spdlog/version.h>
17
18#include <chrono>
19#include <functional>
20#include <memory>
21#include <string>
22
23namespace spdlog
24{
25
27
28 // Create and register a logger with a templated sink type
29 // The logger's level, formatter and flush level will be set according the
30 // global settings.
31 //
32 // Example:
33 // spdlog::create<daily_file_sink_st>("logger_name", "dailylog_filename", 11, 59);
34 template <typename Sink, typename... SinkArgs>
35 inline std::shared_ptr<spdlog::logger> create(std::string logger_name, SinkArgs&&... sink_args)
36 {
37 return default_factory::create<Sink>(std::move(logger_name), std::forward<SinkArgs>(sink_args)...);
38 }
39
40 // Initialize and register a logger,
41 // formatter and flush level will be set according the global settings.
42 //
43 // Useful for initializing manually created loggers with the global settings.
44 //
45 // Example:
46 // auto mylogger = std::make_shared<spdlog::logger>("mylogger", ...);
47 // spdlog::initialize_logger(mylogger);
48 SPDLOG_API void initialize_logger(std::shared_ptr<logger> logger);
49
50 // Return an existing logger or nullptr if a logger with such name doesn't
51 // exist.
52 // example: spdlog::get("my_logger")->info("hello {}", "world");
53 SPDLOG_API std::shared_ptr<logger> get(const std::string& name);
54
55 // Set global formatter. Each sink in each logger will get a clone of this object
56 SPDLOG_API void set_formatter(std::unique_ptr<spdlog::formatter> formatter);
57
58 // Set global format string.
59 // example: spdlog::set_pattern("%Y-%m-%d %H:%M:%S.%e %l : %v");
60 SPDLOG_API void set_pattern(std::string pattern, pattern_time_type time_type = pattern_time_type::local);
61
62 // enable global backtrace support
63 SPDLOG_API void enable_backtrace(size_t n_messages);
64
65 // disable global backtrace support
67
68 // call dump backtrace on default logger
70
71 // Get global logging level
73
74 // Set global logging level
76
77 // Determine whether the default logger should log messages with a certain level
79
80 // Set global flush level
82
83 // Start/Restart a periodic flusher thread
84 // Warning: Use only if all your loggers are thread safe!
85 template <typename Rep, typename Period>
86 inline void flush_every(std::chrono::duration<Rep, Period> interval)
87 {
89 }
90
91 // Set global error handler
92 SPDLOG_API void set_error_handler(void (*handler)(const std::string& msg));
93
94 // Register the given logger with the given name
95 SPDLOG_API void register_logger(std::shared_ptr<logger> logger);
96
97 // Apply a user defined function on all registered loggers
98 // Example:
99 // spdlog::apply_all([&](std::shared_ptr<spdlog::logger> l) {l->flush();});
100 SPDLOG_API void apply_all(const std::function<void(std::shared_ptr<logger>)>& fun);
101
102 // Drop the reference to the given logger
103 SPDLOG_API void drop(const std::string& name);
104
105 // Drop all references from the registry
106 SPDLOG_API void drop_all();
107
108 // stop any running threads started by spdlog and clean registry loggers
109 SPDLOG_API void shutdown();
110
111 // Automatic registration of loggers when using spdlog::create() or spdlog::create_async
112 SPDLOG_API void set_automatic_registration(bool automatic_registration);
113
114 // API for using default logger (stdout_color_mt),
115 // e.g: spdlog::info("Message {}", 1);
116 //
117 // The default logger object can be accessed using the spdlog::default_logger():
118 // For example, to add another sink to it:
119 // spdlog::default_logger()->sinks().push_back(some_sink);
120 //
121 // The default logger can replaced using spdlog::set_default_logger(new_logger).
122 // For example, to replace it with a file logger.
123 //
124 // IMPORTANT:
125 // The default API is thread safe (for _mt loggers), but:
126 // set_default_logger() *should not* be used concurrently with the default API.
127 // e.g do not call set_default_logger() from one thread while calling spdlog::info() from another.
128
129 SPDLOG_API std::shared_ptr<spdlog::logger> default_logger();
130
132
133 SPDLOG_API void set_default_logger(std::shared_ptr<spdlog::logger> default_logger);
134
135 // Initialize logger level based on environment configs.
136 //
137 // Useful for applying SPDLOG_LEVEL to manually created loggers.
138 //
139 // Example:
140 // auto mylogger = std::make_shared<spdlog::logger>("mylogger", ...);
141 // spdlog::apply_logger_env_levels(mylogger);
142 SPDLOG_API void apply_logger_env_levels(std::shared_ptr<logger> logger);
143
144 template <typename... Args>
146 {
147 default_logger_raw()->log(source, lvl, fmt, std::forward<Args>(args)...);
148 }
149
150 template <typename... Args>
151 inline void log(level::level_enum lvl, format_string_t<Args...> fmt, Args&&... args)
152 {
153 default_logger_raw()->log(source_loc{}, lvl, fmt, std::forward<Args>(args)...);
154 }
155
156 template <typename... Args>
157 inline void trace(format_string_t<Args...> fmt, Args&&... args)
158 {
159 default_logger_raw()->trace(fmt, std::forward<Args>(args)...);
160 }
161
162 template <typename... Args>
163 inline void debug(format_string_t<Args...> fmt, Args&&... args)
164 {
165 default_logger_raw()->debug(fmt, std::forward<Args>(args)...);
166 }
167
168 template <typename... Args>
169 inline void info(format_string_t<Args...> fmt, Args&&... args)
170 {
171 default_logger_raw()->info(fmt, std::forward<Args>(args)...);
172 }
173
174 template <typename... Args>
175 inline void warn(format_string_t<Args...> fmt, Args&&... args)
176 {
177 default_logger_raw()->warn(fmt, std::forward<Args>(args)...);
178 }
179
180 template <typename... Args>
181 inline void error(format_string_t<Args...> fmt, Args&&... args)
182 {
183 default_logger_raw()->error(fmt, std::forward<Args>(args)...);
184 }
185
186 template <typename... Args>
187 inline void critical(format_string_t<Args...> fmt, Args&&... args)
188 {
189 default_logger_raw()->critical(fmt, std::forward<Args>(args)...);
190 }
191
192 template <typename T>
193 inline void log(source_loc source, level::level_enum lvl, const T& msg)
194 {
195 default_logger_raw()->log(source, lvl, msg);
196 }
197
198 template <typename T>
199 inline void log(level::level_enum lvl, const T& msg)
200 {
201 default_logger_raw()->log(lvl, msg);
202 }
203
204#ifdef SPDLOG_WCHAR_TO_UTF8_SUPPORT
205 template <typename... Args>
206 inline void log(source_loc source, level::level_enum lvl, wformat_string_t<Args...> fmt, Args&&... args)
207 {
208 default_logger_raw()->log(source, lvl, fmt, std::forward<Args>(args)...);
209 }
210
211 template <typename... Args>
212 inline void log(level::level_enum lvl, wformat_string_t<Args...> fmt, Args&&... args)
213 {
214 default_logger_raw()->log(source_loc{}, lvl, fmt, std::forward<Args>(args)...);
215 }
216
217 template <typename... Args>
218 inline void trace(wformat_string_t<Args...> fmt, Args&&... args)
219 {
220 default_logger_raw()->trace(fmt, std::forward<Args>(args)...);
221 }
222
223 template <typename... Args>
224 inline void debug(wformat_string_t<Args...> fmt, Args&&... args)
225 {
226 default_logger_raw()->debug(fmt, std::forward<Args>(args)...);
227 }
228
229 template <typename... Args>
230 inline void info(wformat_string_t<Args...> fmt, Args&&... args)
231 {
232 default_logger_raw()->info(fmt, std::forward<Args>(args)...);
233 }
234
235 template <typename... Args>
236 inline void warn(wformat_string_t<Args...> fmt, Args&&... args)
237 {
238 default_logger_raw()->warn(fmt, std::forward<Args>(args)...);
239 }
240
241 template <typename... Args>
242 inline void error(wformat_string_t<Args...> fmt, Args&&... args)
243 {
244 default_logger_raw()->error(fmt, std::forward<Args>(args)...);
245 }
246
247 template <typename... Args>
248 inline void critical(wformat_string_t<Args...> fmt, Args&&... args)
249 {
250 default_logger_raw()->critical(fmt, std::forward<Args>(args)...);
251 }
252#endif
253
254 template <typename T>
255 inline void trace(const T& msg)
256 {
258 }
259
260 template <typename T>
261 inline void debug(const T& msg)
262 {
264 }
265
266 template <typename T>
267 inline void info(const T& msg)
268 {
269 default_logger_raw()->info(msg);
270 }
271
272 template <typename T>
273 inline void warn(const T& msg)
274 {
275 default_logger_raw()->warn(msg);
276 }
277
278 template <typename T>
279 inline void error(const T& msg)
280 {
282 }
283
284 template <typename T>
285 inline void critical(const T& msg)
286 {
288 }
289
290} // namespace spdlog
291
292//
293// enable/disable log calls at compile time according to global level.
294//
295// define SPDLOG_ACTIVE_LEVEL to one of those (before including spdlog.h):
296// SPDLOG_LEVEL_TRACE,
297// SPDLOG_LEVEL_DEBUG,
298// SPDLOG_LEVEL_INFO,
299// SPDLOG_LEVEL_WARN,
300// SPDLOG_LEVEL_ERROR,
301// SPDLOG_LEVEL_CRITICAL,
302// SPDLOG_LEVEL_OFF
303//
304
305#ifndef SPDLOG_NO_SOURCE_LOC
306#define SPDLOG_LOGGER_CALL(logger, level, ...) \
307 (logger)->log(spdlog::source_loc{__FILE__, __LINE__, SPDLOG_FUNCTION}, level, __VA_ARGS__)
308#else
309#define SPDLOG_LOGGER_CALL(logger, level, ...) (logger)->log(spdlog::source_loc{}, level, __VA_ARGS__)
310#endif
311
312#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_TRACE
313#define SPDLOG_LOGGER_TRACE(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::trace, __VA_ARGS__)
314#define SPDLOG_TRACE(...) SPDLOG_LOGGER_TRACE(spdlog::default_logger_raw(), __VA_ARGS__)
315#else
316#define SPDLOG_LOGGER_TRACE(logger, ...) (void)0
317#define SPDLOG_TRACE(...) (void)0
318#endif
319
320#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_DEBUG
321#define SPDLOG_LOGGER_DEBUG(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::debug, __VA_ARGS__)
322#define SPDLOG_DEBUG(...) SPDLOG_LOGGER_DEBUG(spdlog::default_logger_raw(), __VA_ARGS__)
323#else
324#define SPDLOG_LOGGER_DEBUG(logger, ...) (void)0
325#define SPDLOG_DEBUG(...) (void)0
326#endif
327
328#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_INFO
329#define SPDLOG_LOGGER_INFO(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::info, __VA_ARGS__)
330#define SPDLOG_INFO(...) SPDLOG_LOGGER_INFO(spdlog::default_logger_raw(), __VA_ARGS__)
331#else
332#define SPDLOG_LOGGER_INFO(logger, ...) (void)0
333#define SPDLOG_INFO(...) (void)0
334#endif
335
336#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_WARN
337#define SPDLOG_LOGGER_WARN(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::warn, __VA_ARGS__)
338#define SPDLOG_WARN(...) SPDLOG_LOGGER_WARN(spdlog::default_logger_raw(), __VA_ARGS__)
339#else
340#define SPDLOG_LOGGER_WARN(logger, ...) (void)0
341#define SPDLOG_WARN(...) (void)0
342#endif
343
344#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_ERROR
345#define SPDLOG_LOGGER_ERROR(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::err, __VA_ARGS__)
346#define SPDLOG_ERROR(...) SPDLOG_LOGGER_ERROR(spdlog::default_logger_raw(), __VA_ARGS__)
347#else
348#define SPDLOG_LOGGER_ERROR(logger, ...) (void)0
349#define SPDLOG_ERROR(...) (void)0
350#endif
351
352#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_CRITICAL
353#define SPDLOG_LOGGER_CRITICAL(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::critical, __VA_ARGS__)
354#define SPDLOG_CRITICAL(...) SPDLOG_LOGGER_CRITICAL(spdlog::default_logger_raw(), __VA_ARGS__)
355#else
356#define SPDLOG_LOGGER_CRITICAL(logger, ...) (void)0
357#define SPDLOG_CRITICAL(...) (void)0
358#endif
359
360#ifdef SPDLOG_HEADER_ONLY
361#include "spdlog-inl.h"
362#endif
363
364#endif // SPDLOG_H
void flush_every(std::chrono::duration< Rep, Period > interval)
Definition registry.h:67
static registry & instance()
Definition registry-inl.h:286
Definition logger.h:56
void warn(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:165
void trace(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:147
void error(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:171
void critical(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:177
void log(source_loc loc, level::level_enum lvl, format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:91
void info(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:159
void debug(format_string_t< Args... > fmt, Args &&... args)
Definition logger.h:153
#define SPDLOG_API
Definition common.h:45
Definition bin_to_hex.h:111
level_enum
Definition common.h:233
Definition async.h:26
SPDLOG_INLINE void disable_backtrace()
Definition spdlog-inl.h:41
SPDLOG_INLINE void register_logger(std::shared_ptr< logger > logger)
Definition spdlog-inl.h:76
void flush_every(std::chrono::duration< Rep, Period > interval)
Definition spdlog.h:86
fmt::format_string< Args... > format_string_t
Definition common.h:176
SPDLOG_INLINE void initialize_logger(std::shared_ptr< logger > logger)
Definition spdlog-inl.h:16
SPDLOG_INLINE std::shared_ptr< logger > get(const std::string &name)
Definition spdlog-inl.h:21
std::shared_ptr< spdlog::logger > create(std::string logger_name, SinkArgs &&... sink_args)
Definition spdlog.h:35
void error(format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:181
SPDLOG_INLINE void set_level(level::level_enum log_level)
Definition spdlog-inl.h:61
void warn(format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:175
void trace(format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:157
SPDLOG_INLINE spdlog::logger * default_logger_raw()
Definition spdlog-inl.h:111
SPDLOG_INLINE void enable_backtrace(size_t n_messages)
Definition spdlog-inl.h:36
SPDLOG_INLINE void shutdown()
Definition spdlog-inl.h:96
SPDLOG_INLINE void set_error_handler(void(*handler)(const std::string &msg))
Definition spdlog-inl.h:71
SPDLOG_INLINE void dump_backtrace()
Definition spdlog-inl.h:46
SPDLOG_INLINE void set_automatic_registration(bool automatic_registration)
Definition spdlog-inl.h:101
SPDLOG_INLINE void apply_logger_env_levels(std::shared_ptr< logger > logger)
Definition spdlog-inl.h:121
SPDLOG_INLINE std::shared_ptr< spdlog::logger > default_logger()
Definition spdlog-inl.h:106
void critical(format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:187
SPDLOG_INLINE void drop(const std::string &name)
Definition spdlog-inl.h:86
void log(source_loc source, level::level_enum lvl, format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:145
SPDLOG_INLINE void flush_on(level::level_enum log_level)
Definition spdlog-inl.h:66
void info(format_string_t< Args... > fmt, Args &&... args)
Definition spdlog.h:169
SPDLOG_INLINE level::level_enum get_level()
Definition spdlog-inl.h:51
SPDLOG_INLINE void set_formatter(std::unique_ptr< spdlog::formatter > formatter)
Definition spdlog-inl.h:26
SPDLOG_INLINE void apply_all(const std::function< void(std::shared_ptr< logger >)> &fun)
Definition spdlog-inl.h:81
SPDLOG_INLINE void set_default_logger(std::shared_ptr< spdlog::logger > default_logger)
Definition spdlog-inl.h:116
pattern_time_type
Definition common.h:289
SPDLOG_INLINE bool should_log(level::level_enum log_level)
Definition spdlog-inl.h:56
SPDLOG_INLINE void set_pattern(std::string pattern, pattern_time_type time_type)
Definition spdlog-inl.h:31
SPDLOG_INLINE void drop_all()
Definition spdlog-inl.h:91
Definition core.h:944
Definition common.h:312
Definition synchronous_factory.h:15
source
Definition tag_strings.h:83