Подтвердить что ты не робот

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

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

15 февраля 2011 г. 3:56:40 org.apache.pdfbox.util.PDFStreamEngine processOperator INFO: неподдерживаемая/отключенная операция: EI

В моем коде я пробовал reset уровни журнала безрезультатно:

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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);
}

Ответ 3

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

Ответ 4

Если у вас нет времени на то, чтобы выяснить, какая реализация Logging используется под общим протоколом 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);
 }