Журнал Apache Log4j2 для конкретного класса в пакете с использованием log4j2.xml - PullRequest
0 голосов
/ 10 февраля 2019

Я использую log4j2, и у меня есть пакет, содержащий множество классов, которые следуют определенной схеме имени.Я хочу, чтобы все сообщения от всех классов определенного типа в соответствующем лог-файле.

Самый простой способ был бы, если бы Logger поддерживал подстановочные знаки, как это: <Logger name="de.gmxhome.golkonda.features.*Type1" ...>, но я узнал, что log4j2 неподдержите это.

Я знаю, что я могу либо назвать регистраторы в файлах классов (например, все *Type1 -классы как public static final Logger LOGGER = LogManager.getLogger("Type1");), либо настроить отдельный регистратор для каждого класса.Но я не хочу менять код, и поскольку я имею дело со многими классами, log4j2.xml станет очень большим.Я пробовал разные фильтры, но не смог найти правильный.

Есть ли способ настроить log4j2 для этого?

Пример: у меня есть два класса

package de.gmxhome.golkonda.features;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Logger1 {

    public static final Logger LOGGER = LogManager.getLogger(Logger1.class);

    public static void log() {
        LOGGER.info("logger1");
    }
}

Допустим, у меня есть тот же класс с именем public class Logger2 в том же пакете.В лог-сообщении должны быть два аппендера:



    <Configuration status="WARN">
    <Loggers>

        <Properties>
            <Property name="pattern">%d{DEFAULT} %-5level [%t] %c -
                %m%n%xException{full}</Property>
        </Properties>

        <Appenders>
            <Console name="appenderLogger1" target="SYSTEM_OUT">
                <PatternLayout pattern="1: ${pattern}" />
            </Console>
            <Console name="appenderLogger2" target="SYSTEM_OUT">
                <PatternLayout pattern="2: ${pattern}" />
            </Console>
        </Appenders>

            <Logger name="de.gmxhome.golkonda.features" level="info" additivity="false">
                <AppenderRef ref="appenderLogger1" />
                <AppenderRef ref="appenderLogger2" />
            </Logger>

    </Loggers>
    </Configuration>

Есть ли фильтр, который можно применить к аппендеру для этой цели, или есть другой способ достижения этой цели.

...