以下在请求的上下文中起作用:
get '/' do
logger.info 'got /'
...
但在一个模型中,
class Foo
def bar
logger.info 'bar'
...
Sinatra 抛出错误:NameError: undefined local variable or method 'logger' for main:Object
如何从模型中访问 Sinatra 记录器?
我相信 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"