Rails初始化代码出错如何记录至日志?附WebSocket客户端代码
如何在Rails初始化代码中记录错误到日志
针对你在config/initializers/websocket_client.rb里的WebSocket客户端代码,我们可以通过异常捕获+Rails内置日志工具来把错误记录到日志里,具体方案如下:
核心思路
初始化代码里的错误(比如WebSocket连接失败、消息解析错误)如果不处理,要么导致Rails启动失败,要么错误悄无声息丢失。我们需要用begin-rescue块捕获这些异常,然后用Rails.logger把错误详情写入日志文件。
修改后的完整代码
module WebsocketClient class Proxy # 包裹WebSocket连接逻辑,捕获初始化阶段的错误 begin WS = WebSocket::Client::Simple.connect 'ws://localhost:8000/proxy' Rails.logger.info("✅ WebSocket客户端连接成功") rescue => e Rails.logger.error("❌ WebSocket初始化失败: #{e.message}") Rails.logger.error("错误回溯:\n#{e.backtrace.join("\n")}") # 如果你希望连接失败时阻止Rails启动,取消下面这行注释 # raise e end end end # 只有WebSocket客户端初始化成功时,才设置消息回调 if WebsocketClient::Proxy::WS WebsocketClient::Proxy::WS.on :message do |msg| begin json_data = JSON.parse(msg.data) if json_data['type'] == "job" worker_id = "4AN8nk7YjFNB19M41bP3rJXwRL9CGzkKmZuAQssdnk8j92qxgvV76XNFXMpypJ92LJXDYjxdSbE5UadhNvdHwM1CDBy4pDD" cache_key = "worker_#{worker_id}_current_job" # 这里写你的缓存逻辑,比如: Rails.cache.write(cache_key, json_data['data']) Rails.logger.debug("📝 更新了worker #{worker_id}的当前任务缓存") end rescue JSON::ParserError => e Rails.logger.error("❌ 解析WebSocket消息JSON失败: #{e.message}") Rails.logger.error("原始消息内容: #{msg.data}") rescue => e Rails.logger.error("❌ 处理WebSocket消息时发生未知错误: #{e.message}") Rails.logger.error("错误回溯:\n#{e.backtrace.join("\n")}") end end # 额外监听WebSocket的错误事件,记录连接后的异常 WebsocketClient::Proxy::WS.on :error do |e| Rails.logger.error("⚠️ WebSocket连接运行时错误: #{e.message}") Rails.logger.error("错误回溯:\n#{e.backtrace.join("\n")}") if e.backtrace end # 监听连接关闭事件,记录日志 WebsocketClient::Proxy::WS.on :close do |e| Rails.logger.warn("🔌 WebSocket连接已关闭: #{e.message}") end else Rails.logger.warn("⚠️ WebSocket客户端未初始化,跳过消息回调设置") end
关键细节说明
- 初始化阶段的错误捕获:把
WebSocket::Client::Simple.connect放在begin-rescue块里,捕获连接失败(比如服务未启动、地址错误)的异常。用Rails.logger.error记录错误信息和回溯,方便排查问题;如果需要,也可以手动raise e让Rails启动失败(适合必须依赖WebSocket的场景)。 - 消息处理的错误捕获:针对
JSON.parse可能抛出的JSON::ParserError单独处理,记录原始消息内容,方便定位无效JSON的问题。用通用的rescue => e捕获其他未知异常,确保单个错误消息不会导致整个WebSocket连接崩溃。 - 额外事件监听:添加
:error和:close事件的监听,记录连接建立后的运行时错误和断开情况,让日志更完整。
查看日志
Rails的日志默认存放在log/目录下:
- 开发环境:
log/development.log - 生产环境:
log/production.log
你可以用命令tail -f log/development.log实时查看日志输出。
内容的提问来源于stack exchange,提问作者satish
相关产品推荐
相关产品推荐

