#pragma once #include #include #include #include #include #include #include #include #include #include #include #include class RemoteLogger { public: RemoteLogger(const RemoteLogger &) = delete; RemoteLogger &operator=(const RemoteLogger &) = delete; RemoteLogger(RemoteLogger &&) = delete; RemoteLogger &operator=(RemoteLogger &&) = delete; // 全局访问点 static RemoteLogger &GetInstance() { static RemoteLogger instance; // 局部静态变量,保证只初始化一次 return instance; } // 安全格式化到字符串 static std::string format_string(const char *format, va_list vl); public: // 初始化函数,返回是否成功 bool Init(const char *target_ip, unsigned short target_port); // 日志输出函数,支持格式化字符串 void log(const char *format, ...); // 关闭连接 void close(); // 检查是否已初始化 bool isInitialized() const; private: RemoteLogger(/* args */); ~RemoteLogger(); int sockfd = -1; struct sockaddr_in server_addr; socklen_t server_len; bool is_initialized = false; };