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

nic*_*hvi 6 ruby rack sinatra puma

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

根据sinatra文档,我应该做的是添加以下行(尝试将其设置false为):

set :logging, nil
Run Code Online (Sandbox Code Playgroud)

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

module Rack
  class CommonLogger
    def call(env)
      # do nothing
      @app.call(env)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

任何人都有任何想法,如果有可能禁用这个没有重新处理这些问题?

mat*_*att 6

如果您处于开发模式并且没有\xe2\x80\x99t 设置该选项, Puma会将日志记录中间件添加--quiet到您的应用程序中。

\n\n

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

\n\n
puma -p 3001 -q\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n


Jil*_*urp 5

我修补了日志(env,status,header,beginning_at)函数,这是由rack调用以生成apache样式日志的函数.我们使用jruby和logback,所以我们没有使用似乎遍布ruby生态系统的所有自定义日志记录.我怀疑fishwife正在使用CommonLogger,这可能解释了为什么我所有尝试禁用它或使用自定义记录器配置它都会失败.也许puma做了类似的事情.我实际上有两个实例.使用我的自定义记录器(yay)进行一次日志记录,另一次使用自己的傻瓜进行记录,将语句放在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
Run Code Online (Sandbox Code Playgroud)

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