3

ロギングレベルをCONFIGに設定しましたが、CONFIGレベルで書き込まれたメッセージが表示されません。私が欠けているものは何ですか?

構成:

Logger logger = java.util.logging.Logger.getLogger("xxx");
logger.setLevel(java.util.logging.Level.CONFIG);

テスト:

logger.log(java.util.logging.Level.SEVERE, "severe");
logger.log(java.util.logging.Level.WARNING, "warning");
logger.log(java.util.logging.Level.INFO, "info");
logger.log(java.util.logging.Level.CONFIG, "config");
logger.log(java.util.logging.Level.FINE, "fine");
logger.log(java.util.logging.Level.FINER, "finer");
logger.log(java.util.logging.Level.FINEST, "finest");

出力:

SEVERE: severe
WARNING: warning
INFO: info
4

2 に答える 2

8

私は通常、ログバックを使用してロギングを実装しますが、これは少し文書化されているようです。だから私はそれに切り替えることをお勧めします。

Loggerしかし、あなたの質問に答えるために、私はあなたが正しく構成されているということだと思いますがHandler、メッセージを送信しているのはそうではありません。デフォルトの構成では、おそらくINFOレベルロギングを備えたハンドラーがルートロガーにアタッチされます。

編集:私は検証するために小さなテストプログラムを書きました、あなたは確かにルートロガーに接続されたハンドラーでレベルを設定する必要があります。あなたはこのようにそうすることができます:

for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.CONFIG);
}
logger.config("config");

出力として与える:

2011年2月11日16:32:14テストメイン
CONFIG:config

これにより、これに接続されているすべてのハンドラーのレベルが設定されます。明らかに、より良い選択は、独自のオプションファイルを作成し、ロガーを明示的に構成することです。簡単なグーグルがこの主題に関するこの記事を見つけました。

次のようなクラスパスのプロパティファイルを使用して構成することもできます。

java.util.logging.ConsoleHandler.level=CONFIG
于 2011-02-11T15:29:16.883 に答える
1

これは予想される動作です。

ログのレベルを定義すると、このレベルのすべてのログだけでなく、より高いレベルにリンクされているログも表示されます。

順序は次のとおりです。

  • SEVERE(最高値)
  • 警告
  • 情報
  • CONFIG
  • 大丈夫
  • FINER
  • FINEST(最小値)

したがって、あなたの場合、レベルをに定義すると、メッセージではなく、ログのみがINFO表示されます。SEVEREWARNINGINFOCONFIG


編集して、修正した質問に答えます。

クラスにサードパーティのライブラリLogger(log4j、slf4jなど)が使用されている可能性があり、このライブラリは独自のログレベルを定義します。たとえば、log4jの場合、次のレベルのみがあります。

  • デバッグ
  • 情報
  • 暖かい
  • エラー
  • 致命的

そのような場合、レベルはあなたの現在の行動を説明するレベルCONFIGと見なされます。INFO

于 2011-02-11T15:06:02.217 に答える