2

私は、バージョン 6.5.0 の Scala でTwitter のロギング フレームワークを使用しています。

私はおもちゃの使用例を書きました:

import com.twitter.logging._

object TestFormatter extends Formatter 
{
    override def format( record : java.util.logging.LogRecord) = "TEST %s> ".format( record.getLevel.getName ) + formatText(record) + lineTerminator
}

object Main extends App
{
    override def main( args : Array[String] ) : Unit =
    {
        // obtain a logger
        val log = Logger.get( getClass )
        // clear any existing message handlers
        Logger.clearHandlers
        // add a new handler, using my toy formatter
        log.addHandler( ConsoleHandler( TestFormatter, Some( Level.DEBUG ) )() )
        // log a couple of test messages
        log.debug( "DEBUG LOG" )
        log.warning( "WARNING LOG" )
    }
}

クラス TestFormatter は実際には必要ありませんが、私の問題を強調するのに役立ちます。このコードからの出力として、これから見る必要があるのは、次の行に沿ったものであると確信しています。

TEST DEBUG> DEBUG LOG
TEST WARNING> WARNING LOG

ただし、実際に得られるのは次のとおりです。

TEST WARNING> WARNING LOG
WARNING: WARNING LOG

これにより、次の 2 つの問題が発生します。

  1. 既存のハンドラーをクリアしたにもかかわらず、他のハンドラーも警告メッセージを処理したのはなぜですか? -解決済み
  2. ロガーのレベルをデバッグに設定すると、デバッグ レベルで記録したメッセージが処理されないのはなぜですか?

誰かがこれらの問題のいずれかに光を当てることができれば、私は最も感謝しています.

4

2 に答える 2

1

Logger.clearHandlers最初の質問については、追加のハンドラーを取り除くために使用するようにコードを変更できます。

log.setLevel(Level.DEBUG)2 番目の質問:期待する出力を得るために追加できます。ハンドラーのレベルの設定が何をするかについては、何も制御していないようです。バグです。少なくとも、ライブラリのドキュメントのバグです。

于 2013-10-11T15:17:41.297 に答える