在分布式系统与高并发场景下,日志系统已成为程序健壮性的核心保障。本文基于现代C++特性,结合多线程同步、异步队列、智能格式化等关键技术,构建一个支持动态配置、多目标输出、线程安全的日志框架,并通过性能测试验证其吞吐量优势。
一、核心架构设计:解耦与扩展性
1.1 模块化分层架构
采用策略模式将日志系统拆分为四大核心组件:
- 日志管理器(LogManager):单例模式管理全局配置,通过工厂模式创建日志记录器
- 日志记录器(Logger):提供流式API接口,支持多级日志级别(DEBUG/INFO/WARN/ERROR/FATAL)
- 输出策略(ISink):抽象接口定义输出行为,支持控制台/文件/网络等扩展
- 格式化器(Formatter):支持JSON/CSV/自定义格式,自动注入时间戳、线程ID等元数据
class ISink {
public:
virtual ~ISink() = default;
virtual void write(const LogMessage& msg) = 0;
};
class Logger {
public:
Logger& operator<<(const std::string& msg) {
if (level_ <= LogManager::get().currentLevel()) {
LogMessage message{level_, msg};
LogManager::get().sink()->write(message);
}
return *this;
}
private:
LogLevel level_;
};
1.2 线程安全机制
通过双缓冲队列实现生产者-消费者模型:
- 无锁队列(SafeQueue):使用C++11原子操作实现线程安全队列
- 异步工作线程:独立线程处理日志落盘,避免阻塞主线程
- 批量写入优化:设置缓冲区阈值(如4KB),减少磁盘I/O次数
template<typename T>
class SafeQueue {
std::queue<T> queue_;
mutable std::mutex mutex_;
std::condition_variable cv_;
:
{
;
queue_.(std::(item));
cv_.();
}
{
;
(queue_.()) ;
item = std::(queue_.());
queue_.();
;
}
};

