Как настроить log4j с помощью log4j.xml для добавления в разные файлы журнала на основе имени класса?

Я хочу настроить log4j так, чтобы все сообщения журнала, созданные из классов в пакете com.foo.bar, переходили в bar.log, а все сообщения журнала, созданные из классов в пакете com.bar.blatz, переходили в blatz.log.

Вопросы

  • Как это сделать с помощью log4j.xml?
  • Я знаю, что это возможно с использованием файлов свойств, но как мне это сделать с помощью конфигурации XML?

person benhsu    schedule 19.05.2009    source источник


Ответы (2)


Это основано на моем ответе на аналогичный вопрос:

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <!-- general application log -->
    <appender name="BarLogFile" class="org.apache.log4j.FileAppender">
        <param name="File" value="bar.log" />
        <param name="Threshold" value="INFO" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
        </layout>
    </appender> 

    <!-- additional fooSystem logging -->
    <appender name="BlatzLogFile" class="org.apache.log4j.FileAppender">
        <param name="File" value="blatz.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
        </layout>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="BarLogFile"/>
    </logger>

    <logger name="com.bar.blatz">
        <appender-ref ref="BlatzLogFile"/>
    </logger>

    <root>
        <level value="INFO"/>
        <!-- no appender, output will be swallowed (I think) -->
    </root>
</log4j:configuration>

Если вы добавите appender-ref к корневому элементу, он также будет получать сообщения com.foo.bar и т. Д. Вы можете остановить это, указав 'additivity = "false"' в регистраторах.

person araqnid    schedule 19.05.2009

  <root>
        <level value="INFO"/>
        <!-- no appender, output will be swallowed (I think) -->
  </root>

Здесь мы можем добавить дополнения. Это будет работать, если приложение использует корневой регистратор. например API кварцевого планировщика.

person Sharat    schedule 24.04.2012
comment
... и намного лучше. - person Reinstate Monica -- notmaynard; 19.04.2013