Отрегулировать уровень ведения журнала для ведения журнала Apache Commons? - PullRequest
20 голосов
/ 16 февраля 2011

У меня есть простое консольное приложение, которое использует библиотеку apache PDFBox, которая, в свою очередь, использует протоколирование общего достояния. Я получаю много нежелательных сообщений в моей консоли, которые я хотел бы подавить:

15 февраля 2011 г. 15:56:40 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 ]

5 голосов
/ 16 февраля 2011

Commons-logging - это только фасад регистрации, то есть он не предоставляет код, который фактически записывает данные журнала, например, на диск. То, что вам нужно изменить, - это конфигурация для фактической реализации ведения журнала (например, logback, log4j, sl4fj и т. Д.). Если такая библиотека не найдена, по умолчанию используется java.util.logging.

Я бы рекомендовал поместить, например, log4j в путь к классам и добавить файл конфигурации log4j.xml в ваш путь к классам. Простого присутствия log4j в пути к классу в этом случае достаточно для его инициализации. Log4j также может быть настроен программно .

2 голосов
/ 27 июня 2015

Это работает для меня:

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);
}
1 голос
/ 28 марта 2016

В случае, если у вас нет времени, чтобы выяснить, какая реализация ведения журнала используется под журналом регистрации Apache, попробуйте отключить все, что находится в вашем classpath. Следующий код тестирует три реализации.

Если какая-либо из строк не компилируется, не добавляйте зависимость! Просто удалите строку.

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);
 }
1 голос
/ 16 февраля 2011

Apache commons-logging использует какую-то другую структуру ведения журнала (java.util.logging или Log4J), вам нужно выяснить, какую из них он использует в вашем проекте, и установить там надлежащие уровни ведения журнала.

...