Ruby 禁用Rack::CommonLogger而不使用猴子补丁

Ruby 禁用Rack::CommonLogger而不使用猴子补丁,ruby,sinatra,rack,puma,Ruby,Sinatra,Rack,Puma,因此,我想为我的sinatra应用程序完全定制日志记录,但我似乎无法禁用Rack::CommonLogger 根据示例,我需要做的就是添加以下行(也尝试将其设置为false): 到我的配置。但是,这不起作用,我仍然在终端中收到类似Apache的日志消息。所以到目前为止,我找到的唯一解决办法就是用猴子来修补这该死的东西 module Rack class CommonLogger def call(env) # do nothing @app.call(env)

因此,我想为我的
sinatra
应用程序完全定制日志记录,但我似乎无法禁用
Rack::CommonLogger

根据示例,我需要做的就是添加以下行(也尝试将其设置为
false
):

到我的配置。但是,这不起作用,我仍然在终端中收到类似Apache的日志消息。所以到目前为止,我找到的唯一解决办法就是用猴子来修补这该死的东西

module Rack
  class CommonLogger
    def call(env)
      # do nothing
      @app.call(env)
    end
  end
end
如果您处于开发模式且未设置“安静”选项,是否可以在不恢复此类事项的情况下禁用此功能?

请将Puma添加到您的应用程序中

要停止Puma登录开发,请在命令行上传递
-q
-quiet
选项:

puma -p 3001 -q
或者,如果您正在使用Puma配置文件,请向其添加
quiet

I monkey修补了log(env、status、header、start_at)函数,rack调用该函数来生成apache风格的日志。我们将jruby与logback结合使用,因此我们不需要所有似乎遍布ruby生态系统的自定义日志。我怀疑fishwife正在初始化CommonLogger,这可能解释了为什么我禁用它或使用自定义记录器配置它的所有尝试都失败了。也许彪马也有类似的行为。事实上,我在同一点上有两个实例。一个使用我的自定义记录器(yay)进行日志记录,另一个仍然在使用stderr上的puts语句。我必须说,我对机架生态系统中的日志记录黑客非常震惊。似乎有人需要一个很大的俱乐部

不管怎么说,把它放在config.ru中对我们有用:

module Rack
  class CommonLogger
    def log(env, status, header, began_at)
      # make rack STFU; our logging middleware takes care of this      
    end
  end
end

除此之外,我还编写了自己的日志中间件,它使用slf4j和适当的MDC,因此我们可以获得更有意义的请求日志记录。

可能不是Sinatra在向STDOUT或STDERR写入内容,而是您的Web服务器Puma可以使用@matt所述的-q(安静)选项启动。使用webrick时,请确保AccessLog配置变量为空数组,否则它也将记录在标准输出中


当您安装应用程序时,默认情况下,Rack包括一些中间件。它在中定义

默认情况下,正如您所提到的,日志中间件是启用的

要禁用它,只需将选项
--quiet
传递到
rackup

rackup --quiet
默认的loggin中间件将不会启用

然后,您可以通过默认记录器(名为
CommonLogger
)启用自己的日志中间件,而不受污染


您也可以将
\\--quiet
添加到
config.ru
文件的顶部,以避免总是键入
--quiet
,但是。

您使用
Sinatra::Application
Sinatra::Base
作为应用程序?我使用
Sinatra::Base
。来自doc
要避免设置任何日志中间件,请将日志设置设置为nil。“
我试过了,并将其设置为“false”。不起作用。您尝试了这个
禁用:日志记录
?耶!几个小时后,这是唯一有效的方法!你不需要那个。只需使用
支架启动即可--安静
。看到我的回答了吗?我正在使用Webrick,我仍然在STDERR上获得日志。奇怪的
rackup --quiet