Sinatra のロガーはリクエスト ハンドラー内でのみ使用できるようです ( https://github.com/sinatra/sinatra#loggingを参照)。針?Sinatra ロガーは他の手段で入手できますか?
3353 次
2 に答える
10
ドキュメントにはスコープの例がいくつか示されていますが、ヘルパー ブロックには Application スコープがあるためlogger
、ブロックで定義されたメソッド内のヘルパーを見ることができます。helper
configure 内では使用できませんが、私がよく行うのは、ラックアップ ファイル内で定数またはクラス インスタンス変数として独自のログを設定することであり、configure 内 (およびその他の場所) で使用できます。単一のアプリケーションの例として:
require 'sinatra'
require 'logger'
configure do
set :logging, nil
logger = Logger.new STDOUT
logger.level = Logger::INFO
logger.datetime_format = '%a %d-%m-%Y %H%M '
set :logger, logger
end
helpers do
def check
settings.logger.info "I'm inside a helper"
# if you were using Sinatra's logger, you could just call
# logger.info "I'm inside a helper"
# and it would work, but only if you've not done the stuff above
# in the configure block
end
end
get "/" do
check # this would work for the way above, or with the Sinatra logger
"Hello, World!"
end
get "/another" do
settings.logger.info "Using the settings helper this time" # this only works
# when you've defined your own logger
"Hello again"
end
より良い「グローバル」としてのクラス インスタンス変数の例:
class MyLogger
def self.logger
if @_logger.nil?
@_logger = Logger.new STDOUT
@_logger.level = Logger::INFO
@_logger.datetime_format = '%a %d-%m-%Y %H%M '
end
@_logger
end
end
そして、必要な場所で使用します:
configure do
set :logging, nil
logger = MyLogger.logger
set :logger, logger
end
またはクラスで:
class AnotherClass
def some_method
MyLogger.logger.warn "I'm in some method"
end
Sinatra には (1.3 以降) logging のヘルパーも付属しています。STDOUT にログを記録するためのレシピと、こちらも便利なファイルがあります。
于 2013-01-22T17:14:47.187 に答える