2

以下は、リクエストのコンテキスト内で機能します。

get '/' do
  logger.info 'got /'
  ...

しかし、モデル内では、

class Foo
  def bar
    logger.info 'bar'
    ...

Sinatraはエラーをスローします:NameError: undefined local variable or method 'logger' for main:Object

モデル内からSinatraロガーにアクセスするにはどうすればよいですか?

4

1 に答える 1

2

シナトラはラックロガーを使っていると思います。readmeから。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"
于 2013-02-20T20:49:41.170 に答える