如何禁用Socket.IO C++客户端连接不可达时的错误日志?
问题
使用socket.io C++客户端时,若服务器不可达,控制台会持续输出以下日志:
[2024-08-27 18:25:18] [error] handle_connect error: Connection refused [2024-08-27 18:25:19] [info] asio async_connect error: asio.system:111 (Connection refused) [2024-08-27 18:25:19] [info] Error getting remote endpoint: asio.system:107 (Transport endpoint is not connected)
已尝试以下两种方法,但均无法屏蔽日志:
- 调用客户端API:
client.set_logs_quiet() - 编译源码时添加编译参数:
CXXFLAGS+="-DSIO_DISABLE_LOGGING"
解决方案
这些日志来自socket.io客户端依赖的Asio底层网络库,而非socket.io客户端自身的日志系统,因此之前的方法无效。可通过以下方式处理:
1. 编译时禁用Asio日志
从源码编译Asio和socket.io-client-cpp时,添加Asio的日志禁用宏:
CXXFLAGS+="-DASIO_DISABLE_LOGGING"
重新编译后,Asio相关的日志会被完全屏蔽。
2. 自定义Asio日志回调(无需重新编译)
通过设置Asio的全局日志回调,将日志输出指向空函数,示例代码:
#include <asio.hpp> // 空日志处理函数,忽略所有日志 void empty_log_handler(const std::string&) {} int main() { // 替换Asio默认的日志回调 asio::set_logging_handler(empty_log_handler); // 初始化并使用socket.io客户端 socketio::client client; // ... 后续客户端操作代码 }
3. 升级客户端版本
部分旧版socket.io-client-cpp存在SIO_DISABLE_LOGGING宏不生效的问题,建议升级到最新稳定版本后,再结合上述方法尝试。
内容的提问来源于stack exchange,提问作者falero80s
相关产品推荐
相关产品推荐

