Rails 5.2 / Ruby 2.5:如何消除垃圾邮件 WEBrick 请求日志?

问题描述 投票:0回答:2

我刚刚将应用程序从 Ruby 2.3 / Rails 4.2 升级到 Ruby 2.5.3 / Rails 5.2.2。升级很顺利,但现在当我在开发服务器中测试调用时,我注意到每个页面请求都会在 STDOUT 中生成两个额外的日志行(但不在我的 Rails

log/development.log
中),我推断它们来自 WEBrick,而不是 Rails。我想删除它们。例如,请参见下面的示例,第一行是 Rails 请求日志(我想保留该日志),以下两行是丑陋且多余的:

...
■ [GET /guiding_principles] params={} user=51 (Topher Hunt) status=200 duration=505.81ms
::1 - - [14/Jan/2019:21:22:45 CET] "GET /guiding_principles HTTP/1.1" 200 8840
http://localhost:3000/guiding_principles -> /guiding_principles
...

如果您正在启动一个新的 WEBrick 服务器,看起来有一些方法可以配置或可能静默日志记录,请参阅例如这里这里。但我没有看到在 Rails 环境中执行此操作的明确方法(或任何指导)。

如何告诉 WEBrick 不要在每个请求上记录任何内容?

ruby-on-rails webrick
2个回答
3
投票

我发现了一个猴子补丁可以很好地完成此任务。安装此补丁后,将不会生成每个请求的日志行,但仍会显示 init 行(提醒您正在运行 WEBrick)。

# (config/initializers/webrick.rb)
# Silence WEBrick's verbose per-request logging
# See https://github.com/ruby/ruby : /lib/webrick/httpserver.rb
if Rails.env.development?
  require 'webrick'

  module WEBrick
    class HTTPServer
      def access_log(a, b, c)
        nil
      end
    end
  end
end

0
投票

在 WEBrick 1.9.1 上,您可以通过传入空的

AccessLog
数组来静默日志。

def server
  opts = {
    AccessLog: []
  }

  Rack::Handler::WEBrick.run(
    Rack::Builder.new do
      # Turns on gzip compression.
      use Rack::Deflater
    end,
    **opts
  )

end
© www.soinside.com 2019 - 2024. All rights reserved.