动态为每个记录器创建Logback文件

3
我有一个“特殊”的日志记录要求 - 我需要每个记录器都在不同的文件中。
Java
Logger log1 = LoggerFactory.getLogger("dynamic.log1");
Logger log2 = LoggerFactory.getLogger("dynamic.log2");
//...

然后我希望logback可以将来自log1的任何输出都写入文件log1.log,以此类推。是否可以使用logback“动态”创建新的appender
其他日志框架能否用于解决这个用例?
我可以手动配置appenders,但这正是我想避免的。例如,每当我添加一个dynamic记录器时,就会相应地创建新的appender/文件。
编辑:
我实现了自定义鉴别器:
public class LoggerBasedDiscriminator extends AbstractDiscriminator<ILoggingEvent> {
    private static final String LOGGER_NAME = "loggerName";
    @Override
    public String getDiscriminatingValue(ILoggingEvent e) {
        return e.getLoggerName();
    }
    @Override
    public String getKey() {
        return LOGGER_NAME;
    }
}

然后我的appender配置看起来像这样:

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator class="cz.svobol.logging.LoggerBasedDiscriminator">
        <key>loggerName</key>
        <defaultValue>root</defaultValue>
    </discriminator>
    <sift>
        <appender name="FILE-${loggerName}" class="ch.qos.logback.core.FileAppender">
            <file>${loggerName}.log</file>
            <encoder>
                <pattern>%msg%n</pattern>
            </encoder>
        </appender>
    </sift>
</appender>
1个回答

2
你可以使用SiftingAppender,这样你就拥有一个能够动态将日志分割成不同文件的 appender。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接