【发布时间】:2013-02-20 19:11:50
【问题描述】:
以下内容在请求的上下文中起作用:
get '/' do
logger.info 'got /'
...
但在模型中,
class Foo
def bar
logger.info 'bar'
...
Sinatra 抛出错误:NameError: undefined local variable or method 'logger' for main:Object
如何从模型中访问 Sinatra 记录器?
【问题讨论】:
-
我总是将 stdout 和 stderr 重定向到一个日志文件,这样我就可以使用 puts 来记录...如果你真的想使用一个记录器,你需要使用一个记录器常量并将它放在一个类,然后在要使用的文件中要求它。
-
你在使用 ORM 吗?其中一些,比如Sequel,会让你传入一个记录器实例。你仍然需要expand the scope to access it the way you've given above,与下面 lsu_guy 给出的方式类似。
-
@iain - 实际上,对于这个项目,我正在使用 ActiveRecord。但我对数据库日志不感兴趣,只对我自己的日志信息感兴趣。
-
@BSeven - 让我们知道你最终做了什么。很想知道。
-
@lsu_guy - 感谢您的回答。我还没试过。与其通过创建模块来增加复杂性,我可能只会声明一个全局并将其设置为 env['rack.logger']。感谢您告诉我该怎么做。