it-swarm-ru.tech

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

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

15 февраля 2011 г. 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 также не помогает, поскольку, похоже, у него нет способа установить уровень.

Есть ли способ подавить эти сообщения программно? Или мне нужно добавить файл конфигурации?

20
user364902

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

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

5
Johan Sjöberg

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

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);
}
2
Wolfgang Fahl

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

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

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
alfonx

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

1
Tomasz Nurkiewicz