NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
logger.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_LOGGING_LOGGER_HPP__
2#define NEFORCE_CORE_LOGGING_LOGGER_HPP__
3
11
17NEFORCE_BEGIN_NAMESPACE__
18
24
37class NEFORCE_API logger {
38private:
39 log_level level_;
40 atomic<bool> async_;
41
43 mutex sinks_mutex_;
44
45 queue<log_event> queue_;
46 mutex queue_mutex_;
48
49 thread worker_;
50 atomic<bool> running_;
51
52 atomic<bool> flush_requested_{false};
53 mutex flush_mutex_;
54 condition_variable flush_cv_;
55
56 function<bool(const log_event&)> filter_;
57 mutex filter_mutex_;
58
60 mutex context_mutex_;
61
66 void enqueue(log_event&& event);
67
72 void enqueue(const log_event& event);
73
77 void start_worker();
78
82 void stop_worker();
83
89 void worker_loop();
90
96 explicit logger(log_level level = log_level::INFO, bool async = false);
97
98public:
103 static logger& instance() {
104 static logger log;
105 return log;
106 }
107
108 logger(const logger&) = delete;
109 logger& operator=(const logger&) = delete;
110 logger(logger&&) = delete;
111 logger& operator=(logger&&) = delete;
112
119
125
132 void set_level(log_level level);
133
140 void set_filter(function<bool(const log_event&)> filter);
141
149 void add_context(const string& key, string value);
150
155 void remove_context(const string& key);
156
161
168 void enable_async(bool async);
169
178 void log(log_level level, string msg, string file, string func, int line);
179
187 void trace(string msg, string file, string func, int line) {
188 log(log_level::TRACE, move(msg), move(file), move(func), line);
189 }
190
198 void debug(string msg, string file, string func, int line) {
199 log(log_level::DEBUG, move(msg), move(file), move(func), line);
200 }
201
209 void info(string msg, string file, string func, int line) {
210 log(log_level::INFO, move(msg), move(file), move(func), line);
211 }
212
220 void warn(string msg, string file, string func, int line) {
221 log(log_level::WARN, move(msg), move(file), move(func), line);
222 }
223
231 void error(string msg, string file, string func, int line) {
232 log(log_level::ERROR, move(msg), move(file), move(func), line);
233 }
234
242 void fatal(string msg, string file, string func, int line) {
243 log(log_level::FATAL, move(msg), move(file), move(func), line);
244 }
245
252 void flush();
253};
254
255
257#define NEFORCE_LOG_TRACE(msg) _NEFORCE logger::instance().trace(msg, __FILE__, __func__, __LINE__)
258
260#define NEFORCE_LOG_DEBUG(msg) _NEFORCE logger::instance().debug(msg, __FILE__, __func__, __LINE__)
261
263#define NEFORCE_LOG_INFO(msg) _NEFORCE logger::instance().info(msg, __FILE__, __func__, __LINE__)
264
266#define NEFORCE_LOG_WARN(msg) _NEFORCE logger::instance().warn(msg, __FILE__, __func__, __LINE__)
267
269#define NEFORCE_LOG_ERROR(msg) _NEFORCE logger::instance().error(msg, __FILE__, __func__, __LINE__)
270
272#define NEFORCE_LOG_FATAL(msg) _NEFORCE logger::instance().fatal(msg, __FILE__, __func__, __LINE__)
273
274
276#define NEFORCE_LOGF_TRACE(msg, ...) \
277 _NEFORCE logger::instance().trace(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
278
280#define NEFORCE_LOGF_DEBUG(msg, ...) \
281 _NEFORCE logger::instance().debug(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
282
284#define NEFORCE_LOGF_INFO(msg, ...) \
285 _NEFORCE logger::instance().info(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
286
288#define NEFORCE_LOGF_WARN(msg, ...) \
289 _NEFORCE logger::instance().warn(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
290
292#define NEFORCE_LOGF_ERROR(msg, ...) \
293 _NEFORCE logger::instance().error(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
294
296#define NEFORCE_LOGF_FATAL(msg, ...) \
297 _NEFORCE logger::instance().fatal(_NEFORCE format(msg, __VA_ARGS__), __FILE__, __func__, __LINE__)
298 // Logging
300
301NEFORCE_END_NAMESPACE__
302#endif // NEFORCE_CORE_LOGGING_LOGGER_HPP__
文件操作类
函数包装器主模板声明
日志记录器单例类
void error(string msg, string file, string func, int line)
记录ERROR级别日志
void log(log_level level, string msg, string file, string func, int line)
记录日志
void set_level(log_level level)
设置日志级别
void remove_context(const string &key)
移除上下文信息
void add_context(const string &key, string value)
添加上下文信息
void set_filter(function< bool(const log_event &)> filter)
设置日志过滤器
void warn(string msg, string file, string func, int line)
记录WARN级别日志
void enable_async(bool async)
启用或禁用异步模式
void clear_context()
清除所有上下文信息
static logger & instance()
获取单例实例
~logger()
析构函数
void debug(string msg, string file, string func, int line)
记录DEBUG级别日志
void fatal(string msg, string file, string func, int line)
记录FATAL级别日志
void info(string msg, string file, string func, int line)
记录INFO级别日志
void trace(string msg, string file, string func, int line)
记录TRACE级别日志
void add_sink(shared_ptr< log_sink > sink)
添加输出目标
void flush()
刷新所有输出目标
非递归互斥锁
队列容器适配器
共享智能指针类模板
线程类
无序映射容器
动态大小数组容器
条件变量行为
通用函数包装器
NEFORCE_NODISCARD future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
log_level
日志级别枚举
@ FATAL
致命级别,表示不可恢复的错误
@ TRACE
跟踪级别,最详细的调试信息
@ WARN
警告级别,表示潜在问题
@ INFO
信息级别,普通信息
@ ERROR
错误级别,表示可恢复的错误
@ DEBUG
调试级别,用于开发调试
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
日志输出目标
队列容器适配器
共享智能指针实现
通用原子类型模板
日志事件结构体