3

次のように、ロガーを呼び出すクラスの名前をログ出力に含めたいと思います。

[MyClass] here is the message

コンテキストを使用するオプションを見てきましたが、ログを記録するときにアプリ全体でこのようなことをする必要はありません(すべてのログメッセージにクラス名が必要です)。

NDC.push('class:' + self.class.name)
logger.debug 'hello'

電話したいのですが:

logger.debug 'hello'

助言がありますか?

4

1 に答える 1

8

コンテキストを使用することをお勧めしますが、独自のフォーマッターを使用することもできます(Log4rフォーマッターを参照) 。

logger = Logger.new 'test'
outputter = Outputter.stdout
outputter.formatter = PatternFormatter.new(:pattern => "%l - kittens - %m")
logger.outputters = outputter
logger.info 'adorable' # => INFO - kittens - adorable

または、実際には、私のアドバイスを参照したいので、実際には次self.classのように機能するロギングモジュールを作成します。

module Logging
  def logger
    return @logger if @logger
    @logger = Logger.new 'test'
    outputter = Outputter.stdout
    outputter.formatter = PatternFormatter.new(:pattern => "%l - #{self.class} - %m")
    @logger.outputters = outputter
    @logger
  end
end

class HasLogging
  include Logging

  def test
    logger.info 'adorable'
  end
end

test = HasLogging.new
test.test # => INFO - HasLogging - adorable

おそらくそのようには正確ではありませんが、あなたはその考えを理解します。

于 2011-03-17T11:38:21.613 に答える