2011-08-09 3 views
3

これは私がやろうとしているものです:java.util.loggingでカスタムログハンドラを使用するには?

Logger logger = LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
Handler handler = new StreamHandler(stream, new SimpleFormatter()); 
logger.addHandler(handler); 
org.slf4j.LoggerFactory.getLogger("com.example").info("foo"); 
logger.removeHandler(handler); 
assert stream.toString().contains("foo"); 

それはSLF4Jと7月のミックスです。 streamは、スクリプトの最後に空です。どうして?

答えて

0

StreamHandlerは、レコードがフォーマットされている場合にのみ、フォーマッタ 'head'を書き込みます。条件付きでは、ハンドラが閉じられている場合、 'head'と 'tail'が書き出されます。そのすべては、LogHecordがStreamHandlerによって消費されていないことを示しているようです。 SimpleFormatterは頭と尾の両方に空の文字列を使用しますので、トラブルシューティングには役立ちません。

  1. すべてのロガー、アペンダー、ハンドラーのレベル/優先度を確認し、正しく設定されていることを確認してください。
  2. LogManagerの代わりにLogger.getLogger(Logger.GLOBAL_LOGGER_NAME)を使用してください。
  3. static final referenceを使用してロガーを保持します。
  4. ハンドラを閉じる。
  5. XMLFormatterを使用すると、頭や尾の出力があるためトラブルシューティングに役立ちます。
  6. Read slf4j + java.util.logging: how to configure?
関連する問題