我正在使用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>
有没有可以为此目的而在附加器上应用的过滤器,或者有实现此目标的另一种方法。