Как отправить java.util.logging в log4j?

У меня есть существующее приложение, которое выполняет всю свою регистрацию в 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 в JUL Logger класс. Это правильный подход?

Какая ирония в том, что использование библиотек встроенного ведения журнала JDK вызовет такую ​​головную боль, когда (в большинстве случаев) остальной мир использует вместо этого сторонние библиотеки.

83 голоса | спросил matt b 15 Maypm09 2009, 21:31:55

6 ответов


0

Мы используем SLF4J в нашем текущем проекте, и он очень хорошо работает для нас. SLF4J написан Ceki Gülcü, создателем Log4J, и он проделал отличную работу. В нашем коде мы напрямую используем API-интерфейсы ведения логов SLF4J и настраиваем SLF4J таким образом, чтобы звонки из ведения журнала Jakarta Commons (JCL), java.util.logging (JUL) и API Log4J все соединены с API SLF4J. Мы должны сделать это, потому что, как и вы, мы используем сторонние библиотеки (с открытым исходным кодом), которые выбрали разные API для ведения журналов.

В нижней части SLF4J вы настраиваете его для использования конкретной реализации логгера. Он поставляется с внутренним или «простым» регистратором, и вы можете переопределить его с помощью Log4J, JUL или Logback , Все настройки выполняются простым добавлением различных файлов jar в ваш путь к классам.

Изначально мы использовали реализацию Logback, также написанную Ceki Gülcü. Это очень сильно. Однако затем мы решили развернуть наше приложение на сервере приложений Glassfish Java EE, чья программа просмотра журналов ожидает сообщения в формате JUL. Итак, сегодня я переключился с Logback на JUL, и всего за несколько минут я заменил два JAR-файла Logback на SLF4J, который соединяет его с реализацией JUL.

Так же, как @overthink, я бы искренне рекомендовал использовать SLF4J в вашей настройке.

ответил Jim Ferrans 16 Mayam09 2009, 10:38:04
0

Существует более простая альтернатива, чем SLF4J, для соединения JUL с log4j, см. http://people.apache.org/~psmith/logging.apache.org/sandbox/jul-log4j-bridge/examples.html

Вам просто нужно поместить jul-log4j-bridge в путь к классам и добавить системное свойство:

-Djava.util.logging.manager=org.apache.logging.julbridge.JULBridgeLogManager

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>

Также возможно восстановить его из источников, выполнив следующие действия:

  1. svn co http: //svn. apache.org/repos/asf/logging/sandbox/jul-to-log4j-bridge/
  2. отредактируйте файл pom.xml, замените зависимость от log4j: log4j: 1.2.15 на log4j: apache-log4j-extras: 1.2.17 и удалите зависимость от apache-log4j-component
  3. пакет mvn
ответил Emmanuel Bourg 1 WedEurope/Moscow2010-12-01T00:02:53+03:00Europe/Moscow12bEurope/MoscowWed, 01 Dec 2010 00:02:53 +0300 2010, 00:02:53
0

ОКТЯБРЬ 2014

Начиная с версии 2.1 в log4j существует компонент log4j-jul, который позволяет именно это. Тем не менее, в случае, если вы используете log4j 1, должна быть возможность обновления до log4j2, чтобы использовать этот подход.

Адаптер ведения журнала JDK

Class LogManager

Миграция из log4j 1.x в log4j 2

ответил AdrianRM 24 +04002014-10-24T14:50:44+04:00312014bEurope/MoscowFri, 24 Oct 2014 14:50:44 +0400 2014, 14:50:44
0

Сайт slf4j, на мой взгляд, имеет мост для передачи событий java.util.logging через slf4j (и, следовательно, в log4j).

Да, загрузка SLF4J содержит jul-to-slf4j, что, я думаю, именно это и делает. Он содержит обработчик JUL для передачи записей в SLF4J.

ответил araqnid 15 Maypm09 2009, 21:48:14
0

@Yishai - Спасибо за размещение ссылки на мою вики. Приведенный здесь пример перенаправляет JUL в Log4J, и он уже несколько лет работает в производственной системе. JBoss 5.x уже перенаправляет JUL в Log4J, поэтому я его убрал, когда мы обновились. У меня есть новый, который перенаправляет на SLF4J, который я сейчас использую в нескольких вещах. Я опубликую это, когда у меня будет шанс.

Однако у SLF4J это уже есть:

http://mvnrepository.com/artifact/org.slf4j/jul -в-SLF4J

ответил Joshua Davis 21 J0000006Europe/Moscow 2010, 21:36:19
0

вы должны вручную добавить блеф при запуске

SLF4JBridgeHandler.removeHandlersForRootLogger()
SLF4JBridgeHandler.install()

demo -> https://gist.github.com/jiahut/654ecc75a13b0a1d8d2> pa4/4/694

ответил jiahut 9 PM00000010000003631 2018, 13:00:36

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132