以下是一个基于C++11多线程异步日志的最佳实现代码样例:
#include <iostream>
#include <sstream>
#include <chrono>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
#include <fstream>
// 定义日志级别
enum LogLevel {
TRACE,
DEBUG,
INFO,
ERROR,
FATAL
};
// 定义日志记录器,包括日志级别、时间戳、线程ID、文件名和内容
struct LogRecord {
LogLevel level;
std::chrono::system_clock::time_point time;
std::thread::id thread_id;
std::string filename;
std::string content;
};
// 定义异步日志器
class AsyncLogger {
public:
AsyncLogger(const std::string& filename)
: m_file(filename), m_is_running(true) {
// 启动日志线程
m_log_thread = std::thread(&AsyncLogger::LogThread, this);
}
~AsyncLogger() {
// 停止日志线程
m_is_running = false;
m_log_cond.notify_one();
if (m_log_thread.joinable()) {
m_log_thread.join