Проблема с конфигурацией log4j xml - PullRequest
1 голос
/ 02 сентября 2011

У меня небольшой вопрос, моя конфигурация log4j.xml указана ниже

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
        </layout>
    </appender>
     <logger name="com.alsodeep">
        <level value="info" />
        <appender-ref ref="console" />
    </logger>  
    <logger name="org.springframework">
        <level value="error" />
        <appender-ref ref="console" />
    </logger>
    <root>
        <priority value="error" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

, и когда я вызываю log.info ("некоторая информация") внутри пакета com.alsodeep, он распечатывается дважды,например

INFO  AspectExample - Call it before method
INFO  AspectExample - Call it before method
Hello
INFO  AspectExample - Call it after method
INFO  AspectExample - Call it after method
List content [[23, 243, 234, 23432]]
INFO  App - final
INFO  App - final

я запутался с этим, что не так с моими настройками log4j.

PS когда я удаляю appender из корневого элемента, все в порядке, и моя информация журнала появляется только один раз.

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

Удалите:

<appender-ref ref="console" />

из определенных регистраторов и оставьте только один в корневом регистраторе:

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
        </layout>
    </appender>
     <logger name="com.alsodeep">
        <level value="info" />
    </logger>  
    <logger name="org.springframework">
        <level value="error" />
    </logger>
    <root>
        <priority value="error" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

Ваша конфигурация действительна, однако, когда вы пытаетесь что-то зарегистрировать на com.alsodeepсначала он получает appender для appender, связанного непосредственно с этим регистратором, а затем распространяется вверх.У com нет связанного с ним приложения, но root (родитель всех регистраторов) имеет.По совпадению это один и тот же консольный приложение, поэтому он добавляется дважды.

2 голосов
/ 02 сентября 2011

Другой возможный ответ: ( при условии, что ваш пример был упрощен от более сложной схемы логгера / аппендера )

Вы можете установить additivity ( см. Раздел «Appenders and Layout» ) на каждом регистраторе на false. Это предотвратит распространение события журнала вверх по иерархии регистратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...