Как настроить log4j для отправки событий журнала в java.util.logging с помощью JULAppender?

Я знаком с фреймворком java.util.logging (JUL), широко его использую. Недавно я начал использовать библиотеку, которая ведет журнал через log4j. Когда я запускаю свое приложение, я получаю на консоли следующее:

log4j:WARN No appenders could be found for logger (com.example.thirdparty.Library).
log4j:WARN Please initialize the log4j system properly.

Похоже, что у log4j есть решение для этого: JULAppender, который отправит все, что зарегистрировано с помощью log4j, в структуру ведения журнала, которую я использую.

Я не могу найти никаких примеров, которые показывают мне, как настроить log4j для использования этого приложения.


person Stephen Ostermiller    schedule 23.05.2014    source источник


Ответы (2)


Стандартный способ настройки log4j - создать log4j.xml в корне пути к классам. Вот содержимое этого файла, настроенного для JULAppender:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="jul" class="org.apache.log4j.JulAppender"> 
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" value="%d %-5p %c - %m%n "/> 
        </layout> 
    </appender> 
    <root> 
        <priority value="all" /> 
        <appender-ref ref="jul" /> 
    </root>  
</log4j:configuration>
person Stephen Ostermiller    schedule 24.05.2014

Реализация JULAppender (который, кстати, доступен для загрузки здесь), сейчас очень старый (с 2008 года) и нацелен на JDK 1.4 и log4j версии 1.2.15.

Если вы работаете с log4j версии 2.0 (и выше), простым решением было бы регистрировать все сообщения с помощью log4j SLF4J appender, который, в свою очередь, настроен на использование java.util.logging в качестве базовой реализации.

Если вы используете maven, просто включите в свой <dependencies> абзац следующее:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.7</version>
</dependency>

Если вы не используете maven в своем проекте, просто загрузите (с веб-сайта maven) и включите следующие 3 jar-файла в свой CLASSPATH, чтобы получить тот же эффект (в дополнение к log4j-api-2.0.jar):

  • log4j-to-slf4j-2.0.jar
  • 1slf4j-jdk14-1.7.7.jar
  • slf4j-api-1.7.7.jar
person Zach-M    schedule 19.01.2015
comment
Действительно ли для этого требуется JDK 14? А как насчет людей, вынужденных использовать JDK 8? - person payne; 23.10.2020
comment
нет, это старый неудачный ярлык, где JDK14 на самом деле означает Jdk1.4, который намного старше, чем JDK8, на который вы нацеливаетесь - person Zach-M; 25.10.2020
comment
кстати, твоя SLF4J appender ссылка мертва. - person payne; 26.10.2020