Подтвердить что ты не робот

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

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

Вопросы

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

Ответ 1

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

<!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 и т.д. Вы можете остановить это, указав "additive =" false "на регистраторах.

Ответ 2

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

Здесь можно добавить приложения. Он будет работать, если приложение использует корневой журнал. например, Quartz Scheduler API.