Я использую 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>
Есть ли фильтр, который можно применить к аппендеру для этой цели, или есть другой способ достижения этой цели.