Как отключить вывод сообщений журнала по внешнему коду? - PullRequest
0 голосов
/ 10 января 2019

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

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

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

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

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

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

1 Ответ

0 голосов
/ 10 января 2019

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

Обычно необходимо выполнить следующие действия:

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

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

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

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

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

.
...