7

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

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

set :logging, nil

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

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

如果可以在不恢复此类问题的情况下禁用此功能,有人有任何想法吗?

4

5 回答 5

7

我猴子修补了 log(env, status, header, started_at) 函数,它被 rack 调用以生成 apache 风格的日志。我们将 jruby 与 logback 一起使用,因此我们不需要使用似乎遍布 ruby​​ 生态系统的所有自定义日志记录。我怀疑 fishwife 正在初始化 CommonLogger,这可以解释为什么我所有尝试禁用它或使用自定义记录器配置它的尝试都失败了。可能 puma 做了类似的事情。实际上,我同时有两个实例。一个使用我的自定义记录器(耶)进行日志记录,另一个仍然在 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,因此我们可以获得更有意义的请求日志。

于 2014-09-05T11:52:46.250 回答
5

如果您处于开发模式且未设置该选项, Puma会将日志中间件添加到您的应用程序。--quiet

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

puma -p 3001 -q

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

于 2014-03-06T15:24:18.843 回答
1

rackupRack 在您的应用程序中默认包含一些中间件。它在这个文件中定义。

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

要禁用它,只需将选项传递--quietrackup

rackup --quiet

并且不会启用默认的登录中间件。

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

您还可以添加#\ --quiet到文件的顶部来避免config.ru总是打字--quiet,但现在不推荐使用这种行为

于 2020-04-10T16:09:36.223 回答
0

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

从 webrick 禁用回声

于 2018-10-04T12:13:39.297 回答
0

这是最好的结果之一。因此,下次我对 sinatra/puma 没有闭嘴感到恼火时,这可能更像是给我未来的自己的一个信息。但要真正获得无声启动:

class MyApp < Sinatra::Base
  configure do
    set :server, :puma
    set :quiet, true
    set :server_settings, Silent: true
  end
end
于 2021-10-18T23:51:19.067 回答