禁用Rack :: CommonLogger,无需修补猴子

时间:2014-03-06 08:57:35

标签: ruby sinatra rack puma

所以,我想为我的sinatra应用程序完全自定义日志记录,但我似乎无法禁用Rack::CommonLogger

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

set :logging, nil

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

module Rack
  class CommonLogger
    def call(env)
      # do nothing
      @app.call(env)
    end
  end
end

任何人都有任何想法,如果可以在没有重新处理这些事情的情况下禁用它吗?

4 个答案:

答案 0 :(得分:5)

我修补了日志(env,status,header,beginning_at)函数,这是由rack调用以生成apache样式日志的函数。我们使用jruby和logback,所以我们没有使用似乎遍布ruby生态系统的所有自定义日志记录。我怀疑fishwife正在使用CommonLogger,这可能解释了为什么我所有尝试禁用它或使用自定义记录器配置它都会失败。也许puma做了类似的事情。我实际上有两个实例。使用我的自定义记录器(yay)进行一次日志记录,另一次使用自己的傻程序将st语句放入stderr。我必须说,我对机架生态系统中的日志记录非常震惊。似乎有人需要一个很大的头脑。

无论如何,把它放在我们的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,以便我们获得更有意义的请求记录。

答案 1 :(得分:4)

如果您处于开发模式但尚未设置--quiet选项,请将Puma adds logging middleware添加到您的应用中。

要停止开发中的Puma日志记录,请在命令行上传递-q--quiet选项:

puma -p 3001 -q

或者如果您使用的是Puma配置文件,请向其添加quiet

答案 2 :(得分:0)

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

Disabling echo from webrick

答案 3 :(得分:0)

rackup应用程序中,Rack默认包含一些中间件。它在this file中定义。

如前所述,默认情况下,启用了日志记录中间件。

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

rackup --quiet

并且默认的loggin中间件将不会启用。

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

您还可以将#\ --quiet文件顶部的config.ru添加到a​​voir中,始终输入--quiet,但键入this behaviour is now deprecated