每个记录器的动态回退文件

Logback file per logger dynamicaly

我对登录有 "special" 要求 - 我需要每个记录器都在单独的文件中。

Java

Logger log1 = LoggerFactory.getLogger("dynamic.log1");
Logger log2 = LoggerFactory.getLogger("dynamic.log2");
//...

然后我希望将 log1 的任何输出写入文件 log1.log 等等。是否可以 "dynamicaly" 使用 logback 创建新的 appender

可以使用其他一些日志记录框架来解决这个用例吗?

我可以手动配置附加程序,但这是我想避免的。就像每当我添加 dynamic 记录器时,都会相应地创建新的 appender/file。

编辑:

我实现了自定义鉴别器:

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>

您可以使用 SiftingAppender.

这样你就有了一个 appender 可以动态地将日志分成不同的文件。