所以,一个简单的小问题。每次我在我的“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
这对我来说有点太冗长了。我可以关闭此反馈吗?
所以,一个简单的小问题。每次我在我的“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
这对我来说有点太冗长了。我可以关闭此反馈吗?
这不是 Datamapper 日志记录,这是 WEBrick 服务器完成的日志记录,它默认使用这两种格式记录所有请求。
(请注意,这也不是Rack 日志记录,尽管 Rack::CommonLogger 使用相同(或至少非常相似)的格式)。
阻止这种情况的最简单方法是切换到不添加自己的日志记录的另一台服务器,例如 Thin。
如果您想继续使用 WEBrick,您需要找到一种方法从您的 Sinatra 应用程序中将选项传递给它。当前发布的 Sinatra gem (1.3.3) 不允许使用简单的方法来执行此操作,但当前的 master 允许您:server_options
设置 Sinatra 然后将传递的设置。所以在未来你应该能够做到这一点:
set :server_settings, {:AccessLog => []}
为了让WEBrick保持沉默。
暂时你可以在你的应用文件的末尾添加这样的东西(我假设你正在启动你的应用程序ruby my_app_file.rb
):
disable :run
Sinatra::Application.run! do |server|
server.config[:AccessLog] = []
end
要切断所有日志记录:
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 => 0
(http://rubydoc.info/gems/dm-core/1.1.0/DataMapper/Logger)
如果您使用 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
}
并且适当的消息将被禁止。(注意:我说“理论上”是因为 usingwith_warnings
在我的 Padrino/DataMapper 环境中给了我一个看似无关的错误。YMMV。)