使用log4j2.xml将Apache Log4j2类特定的日志记录在软件包中

时间:2019-02-10 20:50:27

标签: java logging log4j2

我正在使用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>

有没有可以为此目的而在附加器上应用的过滤器,或者有实现此目标的另一种方法。

0 个答案:

没有答案