Rails 6如何关闭请求产生的INFO级别Started开头日志
Rails 6 屏蔽
Started *格式请求日志的方案 你提到的这类Started *格式的INFO级日志是Rack内置的Rack::Logger中间件输出的,和Puma无关,可通过以下两种方案实现屏蔽:
方案1:完全移除请求起始日志(推荐,适配你的需求)
如果不需要所有这类请求起始记录,直接在Rails配置中移除Rack::Logger中间件即可,操作如下:
- 选择对应生效范围的配置文件:
- 所有环境生效:修改
config/application.rb - 仅生产环境生效:修改
config/environments/production.rb
- 所有环境生效:修改
- 在配置类的内部添加代码:
config.middleware.delete(Rack::Logger)
- 重启Rails服务后即可生效。
注意:该操作仅会关闭请求起始、结束的基础访问日志,不会影响Rails自身的错误日志、自定义业务日志的输出。
方案2:保留其他INFO日志,仅过滤Started *行
如果你不想移除中间件,仅需要屏蔽这一类日志,可以自定义日志格式化器过滤匹配内容:
- 在
config/initializers目录下新建log_silencer.rb文件,写入如下代码:
Rails.application.config.after_initialize do original_formatter = Rails.logger.formatter || Logger::Formatter.new Rails.logger.formatter = ->(severity, timestamp, progname, message) do # 匹配INFO级别且以Started开头的日志,直接返回空字符串过滤 return '' if severity == 'INFO' && message.to_s.start_with?('Started ') original_formatter.call(severity, timestamp, progname, message) end end
- 重启Rails服务后生效,其他INFO级日志会正常输出,仅目标日志被拦截。
如果你的项目使用了lograge这类第三方日志优化gem,直接开启gem的默认配置就会自动屏蔽Rack默认的请求日志,无需额外配置。
内容的提问来源于stack exchange,提问作者Himberjack
相关产品推荐
相关产品推荐

