25

ApacheのPDFBoxライブラリを使用するシンプルなコンソールアプリがあり、コモンズロギングを使用しています。抑制したい多くのジャンク メッセージがコンソールに表示されます。

2011 年 2 月 15 日 3:56:40 PM org.apache.pdfbox.util.PDFStreamEngine processOperator 情報: サポートされていない/無効な操作: EI

私のコードでは、ログ レベルを無駄にリセットしようとしました。

Logger.getLogger("org.apache.pdfbox.util.PDFStreamEngine").setLevel(Level.OFF);
Logger.getLogger("org.apache.pdfbox.util").setLevel(Level.OFF);
Logger.getLogger("org.apache.pdfbox").setLevel(Level.OFF);

これらの設定にもかかわらず、メッセージは引き続きコンソールに表示されます。Commons ロギングからログ オブジェクトを取得しても、レベルを設定する方法がないように見えるため、役に立ちません。

これらのメッセージをプログラムで抑制する方法はありますか? または、構成ファイルを追加する必要がありますか?

4

4 に答える 4

9

Commons-logging はロギング ファサードにすぎません。つまり、実際にログデータをディスクなどに書き込むコードは提供されません。変更する必要があるのは、実際のロギングの実装 (、、など) の構成logbackですlog4j。そのようなライブラリが見つからない場合は、デフォルトでjava.util.logging.

たとえば、クラスパスにlog4jを配置し、クラスパスにlog4j.xml構成ファイルを追加することをお勧めします。log4jこの場合、クラスパスに が存在するだけで初期化できます。Log4j はプログラムで構成することもできます。

于 2011-02-15T21:27:28.070 に答える
2

Apache commons-logging の下でどの Logging 実装が使用されているかを判断する時間がない場合は、クラスパスにあるものをすべて無効にしてみてください。次のコードは、3 つの実装をテストします。

いずれかの行がコンパイルされない場合は、依存関係を追加しないでください! ラインを外すだけ。

String[] loggers = { "org.apache.pdfbox.util.PDFStreamEngine",
    "org.apache.pdfbox.pdmodel.font.PDSimpleFont", "httpclient.wire.header" , "httpclient.wire.content"
for (String ln : names) {
  // Try java.util.logging as backend
  java.util.logging.Logger.getLogger(ln).setLevel(java.util.logging.Level.WARNING);

  // Try Log4J as backend
  org.apache.log4j.Logger.getLogger(ln).setLevel(org.apache.log4j.Level.WARN);

  // Try another backend
  Log4JLoggerFactory.getInstance().getLogger(ln).setLevel(java.util.logging.Level.WARNING);
 }
于 2016-03-27T22:05:28.567 に答える
2

Apache commons-logging は他のログ フレームワーク (java.util.loggingまたは Log4J) を使用するため、プロジェクトで使用するものを調査し、適切なログ レベルを設定する必要があります。

于 2011-02-15T21:28:45.110 に答える