У меня есть существующее приложение, которое выполняет все журналы для log4j. Мы используем ряд других библиотек, которые либо также используют log4j, либо регистрируют против Commons Logging, что в конечном итоге использует log4j под покровом в нашей среде. Одна из наших зависимостей даже записывается в файл slf4j, который также отлично работает, так как в конечном итоге делегирует также и log4j.
Теперь я хотел бы добавить в это приложение ehcache для некоторых нужд кеширования. Предыдущие версии ehcache использовали ведение журнала общего доступа, которое отлично работало бы в этом сценарии, но начиная с версии 1.6-beta1 они удалили зависимость от ведения журнала общего пользования и заменили его на java.util.logging.
Не очень хорошо знаком со встроенным ведением журнала JDK, доступным с java.util.logging, есть ли простой способ, чтобы любые сообщения журнала, отправленные в JUL, регистрировались с помощью log4j, поэтому я могу использовать свою существующую конфигурацию и настроить для любого поступающего журнала из ehcache?
Глядя на javadocs для JUL, похоже, что я мог бы настроить кучу переменных среды, чтобы изменить LogManager
используемую реализацию, и, возможно, использовать это для обертывания log4j Logger
в Logger
классе JUL . Это правильный подход?
Какая-то ирония в том, что использование библиотекой встроенного журналирования JDK вызовет такую головную боль, когда (большая часть) остальной мир вместо этого использует сторонние библиотеки.
Мы используем SLF4J в нашем текущем проекте, и он нам очень помог . SLF4J написан Ceki Gülcü, создателем Log4J, и он проделал действительно большую работу. В нашем коде мы напрямую используем API журналирования SLF4J и настраиваем SLF4J так, чтобы вызовы из Jakarta Commons Logging (JCL), java.util.logging (JUL) и Log4J API все соединялись с API SLF4J. Нам нужно это сделать, потому что, как и вы, мы используем сторонние библиотеки (с открытым исходным кодом), которые выбрали разные API ведения журналов.
В нижней части SLF4J вы настраиваете его для использования определенной реализации регистратора. Он поставляется с внутренним или «простым» регистратором, и вы можете изменить его с помощью Log4J, JUL или Logback . Конфигурация выполняется просто путем добавления разных файлов jar в путь к классам.
Первоначально мы использовали реализацию Logback, также написанную Цеки Гюльджю. Это очень мощно. Однако затем мы решили развернуть наше приложение на сервере приложений Java EE Glassfish, средство просмотра журналов которого ожидает сообщения в формате JUL. Итак, сегодня я переключился с Logback на JUL, и всего за несколько минут я заменил две баночки Logback на банку SLF4J, которая соединяет его с реализацией JUL.
Как и @overthink, я настоятельно рекомендую использовать SLF4J в вашей настройке.
источник
Существует более простая альтернатива , чем SLF4J преодолеть Юля с log4j см http://people.apache.org/~psmith/logging.apache.org/sandbox/jul-log4j-bridge/examples.html
Вам просто нужно поместить jul-log4j-bridge в путь к классам и добавить системное свойство:
jul-log4j-bridge отсутствует в Maven Central и может быть получен из этого репозитория:
<repository> <id>psmith</id> <url>http://people.apache.org/~psmith/logging.apache.org/repo</url> <releases> <enabled>false</enabled> </releases> </repository>
а затем используется с:
<dependency> <groupId>org.apache.logging</groupId> <artifactId>apache-jul-log4j-bridge</artifactId> <version>1.0.0-SNAPSHOT</version> <scope>test</scope> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>apache-log4j-component</artifactId> </exclusion> </exclusions> </dependency>
Также возможно перестроить его из исходников, выполнив следующие действия:
источник
logging.properties
файл.JulLog4jBridge.assimilate();
o_0jul-log4j-bridge
использует никогда не выпущенныйapache-log4j-companions
комплект (бэкпорт из заброшенногоlog4j 1.3
). Вам будет сложно его построить. Естественно, что сам мост тоже заброшен до релиза.ОКТЯБРЬ 2014
Начиная с версии 2.1 log4j существует компонент log4j-jul, который позволяет именно это. Тем не менее, если вы используете log4j 1, должна быть возможность обновления до log4j2, чтобы использовать этот подход.
Адаптер журналирования JDK
Класс LogManager
Переход с log4j 1.x на log4j 2
источник
На сайте slf4j, как мне кажется, есть мост для передачи событий java.util.logging через slf4j (и, следовательно, на log4j).
Да, скачанный файл SLF4J содержит jul-to-slf4j, который, как мне кажется, делает именно это. Он содержит обработчик JUL для передачи записей в SLF4J.
источник
@Yishai - Спасибо, что разместили ссылку на мою вики. В приведенном здесь примере JUL перенаправляется на Log4J, и он работал в производственной системе несколько лет. JBoss 5.x уже перенаправляет JUL на Log4J, поэтому я удалил его при обновлении. У меня есть более новый, который перенаправляет на SLF4J, который я сейчас использую для нескольких вещей. Я отправлю это, когда у меня будет возможность.
Однако в SLF4J он уже есть:
http://mvnrepository.com/artifact/org.slf4j/jul-to-slf4j
источник
вы должны вручную добавить дуновение при запуске
демо -> https://gist.github.com/jiahut/654ecc75a13b0a1d8f3b4d5d2d69dc6d
источник