отрегулировать уровень ведения журнала для регистрации общих apache?

<p>у меня есть простое консольное приложение, которое использует библиотеку apache pdfbox, которая, в свою очередь, использует протоколирование общего достояния. я получаю много нежелательных сообщений в моей консоли, которые я хотел бы подавить:</p><blockquote> <p>15 февраля 2011 г. 3:56:40 pm org.apache.pdfbox.util.pdfstreamengine processoperator info: неподдерживаемая/отключенная операция: ei</p> </blockquote><p>в моем коде я попытался сбросить уровни журнала безрезультатно:</p><pre><code>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); </code></pre><p>несмотря на эти настройки, сообщения все еще отображаются на консоли. извлечение объекта журнала из журнала commons также не помогает, поскольку, похоже, у него нет способа установить уровень.</p><p>есть ли способ подавить эти сообщения программно? или мне нужно добавить файл конфигурации?</p>

<p>commons-logging - это только фасад регистрации, то есть он не предоставляет код, который фактически записывает данные журнала, например, на диск. то, что вам нужно изменить, - это конфигурация для фактической реализации ведения журнала (например, <code>logback</code>, <code>log4j</code>, <code>sl4fj</code> и т.д.). если такая библиотека не найдена, по умолчанию используется <code>java.util.logging</code>.</p><p>я бы порекомендовал поместить, например, <a href="http://logging.apache.org/log4j/1.2/">log4j</a> в classpath и добавить файл конфигурации <a href="http://www.roseindia.net/tutorials/log4j/log4j-xml.shtml">log4j.xml</a> в ваш classpath. простого присутствия <code>log4j</code> в пути к классу в этом случае достаточно для его инициализации. log4j также можно настроить <a href="http://logging.apache.org/log4j/1.2/manual.html">программно</a> .</p>

<p>это работает для меня:</p><pre><code>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); } </code></pre>

<p>в случае, если у вас нет времени, чтобы выяснить, какая реализация ведения журналов используется под журналом регистрации apache, попробуйте отключить все, что находится в вашем пути к классам. следующий код тестирует три реализации.</p><p>если какая-либо строка не компилируется, не добавляйте зависимость! просто удалите строку.</p><pre><code>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); } </code></pre>

<p>apache commons-logging использует некоторую другую структуру ведения журнала (<code>java.util.logging</code> или log4j), вам нужно выяснить, какую из них он использует в вашем проекте, и установить там надлежащие уровни ведения журнала.</p>