所以,我想为我的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
任何人都有任何想法,如果可以在没有重新处理这些事情的情况下禁用它吗?
答案 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服务器。如
答案 3 :(得分:0)
在rackup
应用程序中,Rack默认包含一些中间件。它在this file中定义。
如前所述,默认情况下,启用了日志记录中间件。
要禁用它,只需将选项--quiet
传递给rackup
:
rackup --quiet
并且默认的loggin中间件将不会启用。
然后,您可以启用自己的日志记录中间件,而不会受到默认记录器(名为CommonLogger
)的污染。
您还可以将#\ --quiet
文件顶部的config.ru
添加到avoir中,始终输入--quiet
,但键入this behaviour is now deprecated。