我刚刚将应用程序从 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 不要在每个请求上记录任何内容?
我发现了一个猴子补丁可以很好地完成此任务。安装此补丁后,将不会生成每个请求的日志行,但仍会显示 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
在 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