Каждая структура в различных рамках, произведенных Java (например, Spring и т. Д.), Будет использовать различные системы журнала. Будут определенные проблемы с смешиванием нескольких различных журналов в одном JVM. Здесь мы разберем общие фреймворки журнала в системе Java, введем отношения с каждой системой журнала, ориентированной на SFL4J, и представим, как управлять различными фреймворками в производственной среде.
1. Введение в интерфейс
В системе Java существует в основном два интерфейса системы журнала: SLF4J и обыкновенный лаггин. Есть много структур для реализации, таких как Logack, Log4J и т. Д.
Конечно, хотя оба являются интерфейсами, эти два также могут достичь взаимного вывода прокси -сервера через мостовые пакеты.
Реализация журнала монтированного обыкновения часто бывает log4j. Во время инициализации, если нет особой спецификации для того, кто монтируется, она будет автоматически создана в приведенном выше порядке. Log4Jlogger инкапсулирует журнал Log4J и вызывает Log4J при печати журнала.
2. Мост и быть соединенным в SLF4J
В качестве определения интерфейса, SLF4J может иметь много средств реализации внизу, а также может поддерживать другие реализации журнала или структуры для SFL4J. Его реализация основана на различных пакетах моста.
2.1 мост SLF4J
Как определение интерфейса, ниже есть много реализаций. Принцип реализации состоит в том, чтобы выполнить инициализацию при получении iloggerfactory. Процесс инициализации связывает объект реализации: загрузите все классы, которые реализуют staticloggerbinder, а затем получают его синглтон. При выполнении GetLogger метод этого класса Singleton вызывается для получения соответствующего объекта Logger с конкретной реализацией функций ведения журнала. Если есть несколько реализаций, то свяжите одну из них. Эта ситуация требует удаления нежелательных классов реализации журнала.
2.2 SLF4J соединяется
На приведенном выше рисунке показано, как другие системы журналов подключены к системе журнала SLF4J. Основной принцип состоит в том, чтобы прокси их соответствующие системы журналов и вывод их в интерфейс SFL4J. Для конкретных реализаций вы можете увидеть реализацию пакета Bridge. По сути, оригинальная реализация журнала была переосмыслена, и основной метод фактического вызова вывода журнала - SLF4J.
Только Jul является исключением, потому что Java поставляется с реализацией JDK, и невозможно пересмотреть эти классы. Это место реализует обработчик SLF4J, основанный на механизме расширения Хэндлера, а затем записывает журнал SLF4J. Чтобы вступить в силу, вы также должны изменить JRE/lib/logging.properties для настройки нового обработчика в свойство .handlers. Как правило, производство не будет сделано так.
2.3 Приложение
При применении фактических проектов будьте осторожны, чтобы мостовая и мостовая упаковка не может появиться одновременно, в противном случае произойдет мертвый петлей. Например, SFL4J Bridges как log4j, так и log4j, тогда выходной вызов log4j будет указывать на SLF4J, а SLF4J указывает на Log4J в этом цикле. Обязательно устраните бесполезные пакеты.
Производственные предложения: реализация SLF4J-API монтируется только для того, чтобы сохранить резерв, а мост верхнего регистрации может существовать все, что указывает на SLF4J.
Обратитесь к следующим зависимостям, и все остальные пакеты журналов исключены:
<Depectidents> <dependency> <groupid> org.slf4j </groupid> <artifactid> slf4j-api </artifactid> <sersive> 1.7.24 </version> </depertive> <dehyederiny> <groupid> ch.qos.logback </artifactid> argbackcic </artifactid> <serse> 1.2.1.2.1.2.12. <Depoydency> <groupId> org.slf4j </GroupId> <ArtifactId> jcl-over-slf4j </artifactid> <sersive> 1.7.14 </version> </depervice> <dehydending> <groupid> org.slf4j </GroupD> <artifactid> log4j-over-slf4j </artifActid> <seriad> <artifactid> log4j-over-slf4j </artifactid> <seriad> <artifactid>. </depervice> <dependency> <groupid> org.slf4j </GroupId> <ArtifactId> jul-to-slf4j </artifactid> <sersive> 1.7.7 </version> </depertive> </depertive>
3. Реализация кода тестирования и POM
Тестовый код
открытый класс Testloggers { / ** * slf4j-api-> slf4j-log4j12-> log4j * / public void testsfl4juplog4j () {org.slf4j.logger logger = loggerfactory.getlogger (testloggers.class.getname ()); logger.info ("slf4j print используйте log4j"); } / ** * slf4j-api-> slf4j-jcl-> common-logging-api (автоматически к log4j)-> log4j * / public void testslf4j2commonlogging () {org.slf4j.logger logger = loggerfactory.getlogger (testloggers.class.getname (); logger.warn ("slf4j print to Common Logging"); } / ** * log4j-over-slf4j-api-> logback-classic * / public void testlog4j2slf4j () {org.apache.log4j.logger logger = org.apache.log4j.logger.getlogger (testloggers.class.getname ()); logger.info ("log4j print to slf4j"); } / ** * jcl-over-slf4j-> sfl4-api-> logback * / public void testcommonlogging2sl4j () {log = logfactory.getlog (testloggers.class.getName ()); log.info («Общий журнал для SLF4J»); }/** * jul (консольная по умолчанию)-> jul-to-slf4j-> slf4j-> rougack *, чтобы добавить org.slf4j.bridge.slf4jbridgehandler в jre/lib/logging.properties */public void testjul2slf4j () {java.Util.logging. java.util.logging.logger.getlogger (testloggers.class.getName ()); logger.info ("jul print to slf4j"); } public static void main (string [] args) {testloggers tester = new TestLoggers (); tester.testslf4j2commonlogging (); }}Проверьте зависимости Maven
<Depectiandions> <dependency> <groupid> org.slf4j </groupid> <artifactid> slf4j-api </artifactid> <sersive> 1.7.24 </version> </dependency> <Dependency> <groupId> commons-logging </GroupD> <Artifactid> commons-logging-Api-api </artifactid> <serse> 1.1 <serificid> commons-logging-Api </artifactid> <serse> 1.1 </версия> </версии> </версию> </версию> </версия> </версия>. <!-<dependency>-> <!-<groupid> org.slf4j </groupid>-> <!-<artifactid> jcl-over-slf4j </artifactid>-> <!-<версия> 1.7.14 </version>-> <!-</dependence>-> <dependency> <groupd> org.slf4j </> <! <ArtifactId> log4j-over-slf4j </artifactid> <sersion> 1.7.24 </version> </dependency> <!-<Dependency>-> <!-<GroupId> org.slf4j </GroupId>-> <!-<Artifactid> jul-to-slf4j </artifactid>-> <!-<serifactid>-7.7.7-7.7.7.7.7.7.7 --7.7-7.7. <!-</depertive>-> <!-<degestency>-> <!-<groupid> ch.qos.logback </GroupId>-> <!-<artifactid> rougback-classic </artifactid>-> <!-<версия> 1.2.1 </version>-> <! <!-<groupid> org.slf4j </groupid>-> <!-<artifactid> slf4j-log4j12 </artifactid>-> <!-<версия> 1.7.5 </version>-> <!-</redytifact> <dependency> <groupid> log4j </artifact> <strastifact>. </depervice> <dependency> <groupid> org.slf4j </GroupId> <artifactId> slf4j-jcl </artifactid> <sersive> 1.7.24 </version> </depertive> </depertive>
В приведенной выше статье кратко обсуждается использование совместимости SLF4J с другими системами журналов, которое я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.