NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
log_sink.hpp
浏览该文件的文档.
1#ifndef NEFORCE_LOGGING_LOG_SINK_HPP__
2#define NEFORCE_LOGGING_LOG_SINK_HPP__
3
12
18NEFORCE_BEGIN_NAMESPACE__
19
24
30inline string default_sink_format(const log_event& ev) { return "["_s + to_string(ev.level) + "] " + ev.message; }
31
37NEFORCE_API const color& level_color(log_level level);
38
39
47class NEFORCE_API log_sink {
48protected:
52
53public:
54 virtual ~log_sink() = default;
55
60 virtual void log(const log_event& event) = 0;
61
63 virtual void flush() = 0;
64
70
75 void set_flush_interval(int64_t interval_ms) { flush_interval_ms_ = interval_ms; }
76
81 NEFORCE_NODISCARD bool should_auto_flush() const {
82 return flush_interval_ms_ > 0 && (timestamp::now() - last_flush_).value() >= flush_interval_ms_ * 1000;
83 }
84};
85
86
93class NEFORCE_API console_sink final : public log_sink {
94public:
99 void log(const log_event& event) override;
100
102 void flush() override;
103};
104
105
106#ifdef NEFORCE_PLATFORM_LINUX
107
114enum class syslog_facility : int {
115 LOG_AUTH = 1 << 3,
116 LOG_CRON = 9 << 3,
117 LOG_DAEMON = 3 << 3,
118 LOG_KERN = 0 << 3,
119 LOG_LOCAL0 = 16 << 3,
120 LOG_LOCAL1 = 17 << 3,
121 LOG_LOCAL2 = 18 << 3,
122 LOG_LOCAL3 = 19 << 3,
123 LOG_LOCAL4 = 20 << 3,
124 LOG_LOCAL5 = 21 << 3,
125 LOG_LOCAL6 = 22 << 3,
126 LOG_LOCAL7 = 23 << 3,
127 LOG_LPR = 6 << 3,
128 LOG_MAIL = 2 << 3,
129 LOG_NEWS = 7 << 3,
130 LOG_SYSLOG = 5 << 3,
131 LOG_USER = 1 << 3,
132 LOG_UUCP = 8 << 3,
133};
134
141class NEFORCE_API syslog_sink final : public log_sink {
142private:
143 string ident_;
144 syslog_facility facility_;
145 bool opened_{false};
146
147 void ensure_open();
148
149public:
155 explicit syslog_sink(string ident = "", syslog_facility facility = syslog_facility::LOG_USER);
156
157 ~syslog_sink() override;
158
159 syslog_sink(const syslog_sink&) = delete;
160 syslog_sink& operator=(const syslog_sink&) = delete;
161
166 void log(const log_event& event) override;
167
169 void flush() override;
170};
171
172#endif
173 // Logging
175
176NEFORCE_END_NAMESPACE__
177#endif // NEFORCE_LOGGING_LOG_SINK_HPP__
RGB颜色类
控制台输出目标
void flush() override
刷新控制台缓冲区
void log(const log_event &event) override
输出日志到控制台
日志输出目标基类
timestamp last_flush_
上次刷新的时间戳
virtual void log(const log_event &event)=0
输出一条日志事件
int64_t flush_interval_ms_
自动刷新间隔毫秒数(0=禁用)
void set_flush_interval(int64_t interval_ms)
设置自动刷新间隔
bool should_auto_flush() const
检查是否需要自动刷新
unique_ptr< log_formatter > formatter_
格式化器
virtual void flush()=0
强制刷新缓冲区
void set_formatter(unique_ptr< log_formatter > formatter)
设置格式化器
syslog_sink(string ident="", syslog_facility facility=syslog_facility::LOG_USER)
构造 syslog 输出目标
void flush() override
syslog 每次调用立即写入,无需显式刷新
void log(const log_event &event) override
将日志事件写入 syslog
static timestamp now() noexcept
获取当前时间戳
独占智能指针
颜色类
日期时间处理库
long int64_t
64位有符号整数类型
const color & level_color(log_level level)
获取日志级别对应的控制台颜色
log_level
日志级别枚举
string default_sink_format(const log_event &ev)
默认格式化函数
syslog_facility
Syslog 设施类型
@ LOG_LOCAL4
本地自定义设施 4
@ LOG_LOCAL2
本地自定义设施 2
@ LOG_LOCAL5
本地自定义设施 5
@ LOG_LOCAL1
本地自定义设施 1
@ LOG_USER
通用用户级消息(默认)
@ LOG_LOCAL0
本地自定义设施 0
@ LOG_CRON
定时任务守护进程
@ LOG_SYSLOG
syslogd 内部消息
@ LOG_LOCAL7
本地自定义设施 7
@ LOG_LPR
行式打印机子系统
@ LOG_AUTH
安全/授权消息
@ LOG_DAEMON
系统守护进程
@ LOG_LOCAL6
本地自定义设施 6
@ LOG_LOCAL3
本地自定义设施 3
constexpr string to_string(const CharT &c)
将字符转换为普通字符串
日志事件定义
日志格式化器
格式化器主模板
日志事件结构体
log_level level
日志级别
string message
格式化后的日志消息
独占智能指针