如何从Sinatra的模型访问记录器?

时间:2013-02-20 19:11:51

标签: ruby logging sinatra

以下内容适用于请求:

get '/' do
  logger.info 'got /'
  ...

但在模型中,

class Foo
  def bar
    logger.info 'bar'
    ...

Sinatra抛出错误:NameError: undefined local variable or method 'logger' for main:Object

如何从模型中访问Sinatra记录器?

1 个答案:

答案 0 :(得分:1)

我相信Sinatra使用机架记录器。从自述。 http://www.sinatrarb.com/intro.html#Logging

  

Sinatra将使用它在env ['rack.logger']中找到的任何东西。

您可以使用env ['rack.logger']访问记录器。或者您可以实现自己的应用程序记录器(与Sinatra分开),以便单独保存您的.log并使用您的设置(严重性级别,日志轮换等)。这是一个简单的例子。

module App
  extend self
  attr_accessor :log

  # init
  self.log = Logger.new('log/application.log', 10, 5242880)
  self.log.level = Logger::DEBUG  # could DEBUG, ERROR, FATAL, INFO, UNKNOWN, WARN

  self.log.formatter = proc { |severity, datetime, progname, msg|
                              "#{severity} :: #{datetime.strftime('%Y-%m-%d :: %H:%M:%S')} :: #{progname} :: #{msg}\n" 
end

然后从您的课程中,使用以下其中一项:

App.log.debug "some debug msg" 
App.log.info  "some info msg"
App.log.error "some error msg"