Ruby 如何从Sinatra中的模型访问记录器?
以下内容在请求上下文中起作用:Ruby 如何从Sinatra中的模型访问记录器?,ruby,logging,sinatra,Ruby,Logging,Sinatra,以下内容在请求上下文中起作用: get '/' do logger.info 'got /' ... 但在一个模型中 class Foo def bar logger.info 'bar' ... Sinatra抛出错误:NameError:main:Object的未定义局部变量或方法“logger” 如何从模型内访问Sinatra记录器?我相信Sinatra使用机架记录器。自述 Sinatra将使用它在env['rack.logger']中找到的任何东西 您可以
get '/' do
logger.info 'got /'
...
但在一个模型中
class Foo
def bar
logger.info 'bar'
...
Sinatra抛出错误:NameError:main:Object的未定义局部变量或方法“logger”
如何从模型内访问Sinatra记录器?我相信Sinatra使用机架记录器。自述 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"
我总是将stdout和stderr重定向到一个日志文件,这样我就可以使用put来记录。。。如果你真的想使用一个记录器,你需要使用一个记录器常量并将其放入一个类中,然后在你想要使用它的文件中要求它。你使用的是ORM吗?其中一些,例如,将允许您传入记录器实例。你仍然需要这样做,就像lsu的家伙在下面给出的一样。@iain-实际上,对于这个项目,我使用的是ActiveRecord。但我对数据库日志不感兴趣,只对我自己的日志信息感兴趣。@bseen-让我们知道你最终会做什么。很想知道。@lsu_盖-谢谢你的回答。我还没试过。与其通过创建模块来增加复杂性,我可能只声明一个全局变量并将其设置为env['rack.logger']。谢谢你告诉我怎么做。请注意,如果你想让代码示例正常工作,你需要
要求“logger”
。