ActiveSupport::Logger无broadcast方法报错,Rollbar日志集成求助
解决Rails 7.1中Rollbar Logger集成的
undefined method 'broadcast'错误 问题根源
Rails 7.0及以上版本移除了ActiveSupport::Logger.broadcast方法,官方改用ActiveSupport::BroadcastLogger类实现多日志目标的广播功能,你之前的代码是针对Rails旧版本的写法,因此触发NoMethodError。
正确实现方式
要同时保留原Rails日志输出(如控制台、日志文件)和Rollbar日志推送,需要将原Rails.logger和Rollbar::Logger一起传入ActiveSupport::BroadcastLogger:
require 'rollbar/logger' # 保留原日志输出,同时添加Rollbar作为额外日志目标 Rails.logger = ActiveSupport::BroadcastLogger.new( Rails.logger, Rollbar::Logger.new )
如果需要单独设置Rollbar日志的级别(比如只推送INFO及以上级别的日志),可以单独初始化并配置:
require 'rollbar/logger' rollbar_logger = Rollbar::Logger.new rollbar_logger.level = Logger::INFO # 自定义Rollbar日志级别 # 组合原日志器和Rollbar日志器 Rails.logger = ActiveSupport::BroadcastLogger.new(Rails.logger, rollbar_logger)
你之前尝试的问题说明
- 直接使用
ActiveSupport::BroadcastLogger.new(Rollbar::Logger.new)会替换掉原有的Rails日志器,导致控制台、本地日志文件不再输出日志,不符合常规需求。 Rollbar::Logger没有add_logger方法,该方法属于ActiveSupport::BroadcastLogger,所以第三种写法无法生效。
验证方法
执行以下代码测试日志是否同时输出到本地和Rollbar:
Rails.logger.error("Test Rollbar error log")
之后登录Rollbar后台检查是否收到这条日志即可。
内容的提问来源于stack exchange,提问作者Divya Shrestha
相关产品推荐
相关产品推荐

