如何在Sinatra中沉默DataMapper

时间:2012-09-19 07:30:01

标签: sinatra datamapper

所以,一个简单的小问题。每当我在一个“get”或“post”块中使用DataMapper执行某些事务时,我得到的输出看起来像这样......

core.local - - [19/Sep/2012:09:04:54 CEST] "GET /eval_workpiece/state?id=24 HTTP/1.1" 200 4
- -> /eval_workpiece/state?id=24

根据我的喜好,这有点过于冗长。我可以关掉这个反馈吗?

3 个答案:

答案 0 :(得分:2)

这不是Datamapper日志记录,这是WEBrick服务器完成的日志记录,logs all requests using these two formats by default

(注意这个不是 Rack记录,尽管Rack :: CommonLogger使用相同(或至少非常相似)的格式)。

停止此操作的最简单方法是切换到另一个不添加自己日志记录的服务器,例如Thin。

如果您想继续使用WEBrick,您需要找到一种方法从Sinatra应用程序向其传递选项。目前发布的Sinatra gem(1.3.3)不允许使用简单的方法,而是current master allows you to set the :server_options setting which Sinatra will then pass on。所以将来你应该能够做到这一点:

set :server_settings, {:AccessLog => []}

为了沉默WEBrick。

目前您可以在应用文件的末尾添加类似的内容(我假设您正在使用类似ruby my_app_file.rb的内容启动您的应用):

disable :run
Sinatra::Application.run! do |server|
  server.config[:AccessLog] = []
end

答案 1 :(得分:1)

切断所有日志记录:

DataMapper.logger = nil

改变冗长:

DataMapper.logger.set_log(logger, :warn) # where logger is Sinatra's logging object

其他级别为:fatal => 7, :error => 6, :warn => 4, :info => 3, :debug => 0http://rubydoc.info/gems/dm-core/1.1.0/DataMapper/Logger

答案 2 :(得分:0)

如果您正在使用ActiveSupport运行,则可以使用内核扩展:

quietly { perform_a_noisy_task }

这会在块的持续时间内临时将STDOUT和SDTERR绑定到/ dev / null。由于您可能不想禁止所有输出,理论上您可以这样做:

with_warnings(:warn) { # or :fatal or :error or :info or :debug
  perform_a_noisy_task
}

将禁止相应的消息。 (注意:我说'理论上'因为在我的Padrino / DataMapper环境中使用with_warnings给了我一个看似无关的错误.YMMV。)