請求的範圍內的以下工作:如何在Sinatra中訪問模型中的記錄器?
get '/' do
logger.info 'got /'
...
但在模型中,
class Foo
def bar
logger.info 'bar'
...
西納特拉拋出錯誤:NameError: undefined local variable or method 'logger' for main:Object
如何從模型中訪問西納特拉記錄?
請求的範圍內的以下工作:如何在Sinatra中訪問模型中的記錄器?
get '/' do
logger.info 'got /'
...
但在模型中,
class Foo
def bar
logger.info 'bar'
...
西納特拉拋出錯誤:NameError: undefined local variable or method 'logger' for main:Object
如何從模型中訪問西納特拉記錄?
我相信Sinatra使用機架記錄器。從自述。 http://www.sinatrarb.com/intro.html#Logging
Sinatra will use whatever it will find in 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"
請注意,如果您希望代碼示例正常工作,您需要'require'logger''。 – 2014-01-07 08:59:43
我總是重定向輸出和錯誤日誌文件,所以我可以只使用看跌期權來登錄...如果你真的想使用記錄器,您需要使用記錄器常量並將其放入類中,然後在要使用它的文件中要求它。 – texasbruce 2013-02-20 19:35:27
您使用的是ORM嗎?其中一些例如[Sequel](http://sequel.rubyforge.org/rdoc/files/doc/cheat_sheet_rdoc.html)將允許您傳入記錄器實例。你仍然需要[按照上面給出的方式擴展範圍](http://stackoverflow.com/a/14865988/335847),類似於下面給出的一個lsu_guy。 – iain 2013-02-21 14:56:43
@iain - 實際上,對於這個項目我使用的是ActiveRecord。但我對數據庫日誌不感興趣,只是我自己的日誌信息。 – 2013-02-21 16:43:02