Как отключить вывод сообщений журнала по внешнему коду?
Это общий вопрос.
В моем коде я звоню в стороннюю библиотеку. В этой библиотеке есть регистратор, который выводит сообщения журнала, используя фабрику журналов из org.apache.commons.logging
, Эти сообщения журнала появляются в моей консоли, наряду со всеми другими журналами из моего собственного кода. Есть ли простой способ отключить печать сообщений журнала из этой внешней библиотеки? Я не хочу менять общие конфигурации журналирования для моей программы, так как я хочу, чтобы все остальные журналы были такими, какие они есть.
Было бы полезно что-то вроде псевдокода ниже:
ignoreLogsFrom {
// This call is the one that produces the logging
externalLibrary.get
}
По сути, возможность предотвратить любые сообщения, исходящие из определенного блока кода или даже библиотеки.
Спасибо, если вы можете указать мне правильное направление.
1 ответ
Да, вы можете, но трудно дать правильный общий совет. Это то, что commons-logging
является библиотекой-оберткой: она не реализует саму запись в журнал, она делегирует ее какой-то другой библиотеке.
Как правило, вы должны сделать следующие шаги:
Узнайте, какая реализация логгера используется. По умолчанию это Log4J, но это может быть что-то другое (другие популярные варианты включают Logback или SLF4J, который является другим фасадом)
Найдите имя регистратора, используемого внешней библиотекой. Этот параметр передается в
LogFactory.getLog
вызов. Обычно это будет что-то вроде полного имени регистрируемого класса. Идея присвоения имен - это именно та функция, которая вам нужна, поскольку она позволяет по-разному настраивать регистраторы для разных частей приложения.Узнайте, где хранится конфигурация для найденной библиотеки #1. Обычно это какой-то файл свойств или файл XML (например,
log4j.properties
)Узнайте, как в этой библиотеке журналов настраивается "уровень" для указанного именованного регистратора. Большинство современных библиотек журналов поддерживают иерархические конфигурации, поэтому вам может быть проще отключить ведение журнала для всего пакета внешней библиотеки, а не для отдельных классов.
PS Вероятно, отключение всей регистрации для библиотеки не очень хорошая идея, может быть достаточно поднять уровень до чего-то вроде WARN
или же ERROR
значительно сократить количество бревен, но при этом не пропустить действительно важный