Можно ли получить ссылку на регистратор, который использует Spring? - PullRequest
2 голосов
/ 20 января 2012

Согласно документации Spring Framework, ведение журнала является единственной обязательной зависимостью Spring.Он использует Apache Commons Logging по умолчанию или может быть настроен на использование SLF4J или Log4J.Мой вопрос касается приложения, которое я пишу с использованием Spring, вместо использования другого класса logger и создания экземпляра нового объекта logger в моем приложении, возможно ли получить ссылку на регистратор, который Spring использует для себя?

Ответы [ 2 ]

4 голосов
/ 20 января 2012

Конечно - регистраторы ссылаются только по имени. Поэтому, если Spring использует «org.springframework.beans.abc» (например) в качестве имени регистратора, вы также можете запросить регистратор с тем же именем. (Spring не регистрирует, используя только один регистратор / имя - он использует несколько, в зависимости от того, что вы используете в Spring - как следует.)

Однако я настоятельно рекомендую не делать этого. Стоимость создания нового объекта логгера должна быть минимальной - и любая экономия при этом будет более чем компенсирована дополнительной путаницей в этом. Spring регистрирует имена Spring в логгере. Ваш код должен войти в систему под именем регистратора, уникальным для вашего кода. В противном случае, если что-то зарегистрировано, как вы узнаете, идет ли оно из кода Spring или из вашего кода? Это полностью уничтожило бы цель имен регистраторов / категорий.

2 голосов
/ 20 января 2012

Нужно прояснить несколько вещей. Apache Commons Logging - это фасад регистрации, а не сам регистратор. Библиотеки Spring используют этот фасад, чтобы избежать связи с какой-либо конкретной реализацией ведения журнала.

Spring (или любой другой объект, использующий протоколирование Apache Commons) можно настроить для использования SLF4J, предоставив реализацию моста, которую SLF4J предоставляет для ведения журнала Apache Commons. SLF4J также является фасадом ведения журнала, но имеет улучшения по сравнению с ведением журнала Apache Commons, и я бы лично рекомендовал использовать его для входа в ваш код. Ведение журнала с помощью SLF4J также позволяет избежать привязки к какой-либо конкретной реализации ведения журнала.

Более подробную информацию о SLF4J можно найти на их веб-сайте. http://www.slf4j.org. Первая страница Руководства по SLF4J показывает, как создать регистратор и использовать его. Когда ваш код использует регистратор SLF4J, он будет делегировать ведение журнала во время выполнения реальному регистратору, такому как Log4J, java.util.logging или Logback, в зависимости от того, какую привязку slf4j вы предоставляете в classpath.

Обычно при ведении журнала общепринятой практикой является наличие средства ведения журнала для каждого регистрируемого класса (путем присвоения имени каждому устройству ведения журнала полного имени класса, использующего его). Этот принцип продемонстрирован в руководстве SLF4J, которое я связал выше.

...