FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
logger.hpp
Go to the documentation of this file.
1
8#pragma once
9
10#include <mutex>
11#include <sstream>
12#include <unistd.h>
13
14namespace fix40 {
15
31class Logger {
32public:
37 static Logger& instance() {
38 static Logger logger;
39 return logger;
40 }
41
46 void setEnabled(bool enabled) {
47 enabled_ = enabled;
48 }
49
54 bool isEnabled() const {
55 return enabled_;
56 }
57
65 class LogStream {
66 public:
72 LogStream(std::mutex& mtx, bool enabled) : mtx_(mtx), enabled_(enabled) {}
73
80 if (!enabled_) return;
81 buffer_ << '\n';
82 std::string str = buffer_.str();
83 std::lock_guard<std::mutex> lock(mtx_);
84 // 使用 write() 系统调用,单次调用是原子的
85 ::write(STDOUT_FILENO, str.c_str(), str.size());
86 }
87
88 LogStream(const LogStream&) = delete;
89 LogStream& operator=(const LogStream&) = delete;
90
95 LogStream(LogStream&& other) noexcept
96 : mtx_(other.mtx_), enabled_(other.enabled_), buffer_(std::move(other.buffer_)) {}
97
104 template<typename T>
105 LogStream& operator<<(const T& value) {
106 if (enabled_) {
107 buffer_ << value;
108 }
109 return *this;
110 }
111
112 private:
113 std::mutex& mtx_;
114 bool enabled_;
115 std::ostringstream buffer_;
116 };
117
123 return LogStream(mutex_, enabled_);
124 }
125
126private:
127 Logger() = default;
128 std::mutex mutex_;
129 bool enabled_ = true;
130};
131
138#define LOG() fix40::Logger::instance().log()
139
140} // namespace fix40
日志流对象,支持流式输出
Definition logger.hpp:65
LogStream(LogStream &&other) noexcept
移动构造函数
Definition logger.hpp:95
LogStream(std::mutex &mtx, bool enabled)
构造日志流
Definition logger.hpp:72
~LogStream()
析构时输出日志
Definition logger.hpp:79
LogStream & operator=(const LogStream &)=delete
LogStream & operator<<(const T &value)
流式输出操作符
Definition logger.hpp:105
LogStream(const LogStream &)=delete
线程安全的日志输出器(单例模式)
Definition logger.hpp:31
LogStream log()
创建日志流对象
Definition logger.hpp:122
void setEnabled(bool enabled)
启用或禁用日志输出
Definition logger.hpp:46
static Logger & instance()
获取 Logger 单例实例
Definition logger.hpp:37
bool isEnabled() const
检查日志是否启用
Definition logger.hpp:54
Definition matching_engine.hpp:23