log4j: Вихід журналу певного класу до певного додатка


161

Я використовую log4j і хотів би спрямувати вихід певних Loggers до певних файлів.

У мене вже є кілька аплікацій. Тепер, щоб полегшити налагодження, я хочу сказати log4j, що вихід, створений певним класом (наприклад, foo.bar.Baz), повинен бути записаний у певний файл журналу.

Чи можна це зробити?

Відповіді:


203

Приклад:

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

21
ах - це просто! Дякую! Чи примушує log4j.additivity.foo.bar.Baz = хибна установка, що вихід Baz не відображатиметься в додатку rootLogger?
gubrutz

3
для якої версії log4J це? Я намагаюся знайти конфігурацію xml, щоб зробити те ж саме для log4j версії 1.2.17
AC

1
@RodrigoGurgel так, нічого незвичайного там немає
Моріс Перрі

4
@dwjohnston налаштування придатності до false не дозволить реєстратору ввійти до додатків своїх предків (це істинно за замовчуванням). У такому випадку, якби придатність була залишена справжньою, реєстрація в додатку Baz записала б в обидва файли.
Моріс Перрі

1
якісь думки щодо конфігурації xml?
Ігор Донін

21

Ось відповідь, що стосується конфігурації XML, зауважте, що якщо ви не надасте додатку файл a, ConversionPatternвін створить файл 0 байтів і нічого не напише:

<?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>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

2
це дуже важливо , щоб видалити <appender-ref ref="bdfile"/>з <root>- в іншому випадку ви будете бачити весь ваш журнал копіюється в цей файл , а також.
субота

як налаштувати це за замовчуванням pacakge або для конкретного класу без пакета?
Прасад Ядхав

Це <logger>...стихія. Вкажіть клас чи пакунок як ім'я та додаток як додаток файлу.
Майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.