Rails生产环境报错:GELF::Logger不存在silence方法
Rails生产环境日志配置报错解决
问题信息
- 环境版本:
- Rails 6.0.0
- Ruby 2.6.6
application.rb中的配置代码:
config.lograge.enabled = true config.lograge.formatter = Lograge::Formatters::Graylog2.new config.logger = GELF::Logger.new( "127.0.0.1", "12201", 'WAN', facility: "MY APP", host: "LOCAL", )
- 生产环境运行时触发错误:
NoMethodError (undefined method `silence' for #<GELF::Logger:0x000055c41ec5abd8>)
原因分析
Rails框架要求Logger对象提供silence方法用于临时抑制日志输出,但GELF::Logger本身未实现该方法,导致调用时抛出异常。
解决方案
方案一:用ActiveSupport包装GELF Logger
修改application.rb中的Logger配置,通过ActiveSupport::Logger.broadcast将GELF Logger包装为Rails兼容实例:
config.lograge.enabled = true config.lograge.formatter = Lograge::Formatters::Graylog2.new gelf_logger = GELF::Logger.new( "127.0.0.1", "12201", 'WAN', facility: "MY APP", host: "LOCAL", ) config.logger = ActiveSupport::Logger.broadcast(gelf_logger)
该包装器会自动补充Rails所需的silence等方法。
方案二:给GELF::Logger添加silence方法
在config/initializers目录下新建gelf_logger.rb文件,添加以下代码:
class GELF::Logger def silence(_level = Logger::ERROR) yield end end
手动实现silence方法,避免Rails调用时报错。
内容的提问来源于stack exchange,提问作者sarguna
相关产品推荐
相关产品推荐

