ApacheのPDFBoxライブラリを使用するシンプルなコンソールアプリがあります。このライブラリは、コモンズログを使用します。コンソールに抑制したいジャンクメッセージがたくさん表示されます。
2011年2月15日3:56:40 PM org.Apache.pdfbox.util.PDFStreamEngine processOperator INFO:サポートされていない/無効な操作: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ロギングからログオブジェクトを取得しても、レベルを設定する方法がないように見えるため、役に立ちません。
これらのメッセージをプログラムで抑制する方法はありますか?または、構成ファイルを追加する必要がありますか?
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);
}
Apache commons-loggingは、その下にある他のロギングフレームワークを使用します(Java.util.logging
またはLog4J)、プロジェクトでどちらを使用しているかを調査し、そこで適切なログレベルを設定する必要があります。
これは私のために働きます:
String[] loggers = { "org.Apache.pdfbox.util.PDFStreamEngine",
"org.Apache.pdfbox.pdmodel.font.PDSimpleFont" };
for (String logger : loggers) {
org.Apache.log4j.Logger logpdfengine = org.Apache.log4j.Logger
.getLogger(logger);
logpdfengine.setLevel(org.Apache.log4j.Level.OFF);
}