Как отключить вывод сообщений журнала по внешнему коду?

Это общий вопрос.

В моем коде я звоню в стороннюю библиотеку. В этой библиотеке есть регистратор, который выводит сообщения журнала, используя фабрику журналов из org.apache.commons.logging, Эти сообщения журнала появляются в моей консоли, наряду со всеми другими журналами из моего собственного кода. Есть ли простой способ отключить печать сообщений журнала из этой внешней библиотеки? Я не хочу менять общие конфигурации журналирования для моей программы, так как я хочу, чтобы все остальные журналы были такими, какие они есть.

Было бы полезно что-то вроде псевдокода ниже:

ignoreLogsFrom {
  // This call is the one that produces the logging
  externalLibrary.get
}

По сути, возможность предотвратить любые сообщения, исходящие из определенного блока кода или даже библиотеки.

Спасибо, если вы можете указать мне правильное направление.

1 ответ

Решение

Да, вы можете, но трудно дать правильный общий совет. Это то, что commons-logging является библиотекой-оберткой: она не реализует саму запись в журнал, она делегирует ее какой-то другой библиотеке.

Как правило, вы должны сделать следующие шаги:

  1. Узнайте, какая реализация логгера используется. По умолчанию это Log4J, но это может быть что-то другое (другие популярные варианты включают Logback или SLF4J, который является другим фасадом)

  2. Найдите имя регистратора, используемого внешней библиотекой. Этот параметр передается в LogFactory.getLog вызов. Обычно это будет что-то вроде полного имени регистрируемого класса. Идея присвоения имен - это именно та функция, которая вам нужна, поскольку она позволяет по-разному настраивать регистраторы для разных частей приложения.

  3. Узнайте, где хранится конфигурация для найденной библиотеки #1. Обычно это какой-то файл свойств или файл XML (например, log4j.properties)

  4. Узнайте, как в этой библиотеке журналов настраивается "уровень" для указанного именованного регистратора. Большинство современных библиотек журналов поддерживают иерархические конфигурации, поэтому вам может быть проще отключить ведение журнала для всего пакета внешней библиотеки, а не для отдельных классов.

PS Вероятно, отключение всей регистрации для библиотеки не очень хорошая идея, может быть достаточно поднять уровень до чего-то вроде WARN или же ERROR значительно сократить количество бревен, но при этом не пропустить действительно важный

Другие вопросы по тегам