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

标签 java logging logback

我对登录有“特殊”要求 - 我需要将每个记录器放在单独的文件中。

Java

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

然后我希望将 log1 的任何输出写入到文件 log1.log 中,依此类推。是否可以像使用 logback 那样“动态地”创建新的 appender

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

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

编辑:

我实现了自定义鉴别器:

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 可以动态地将日志分成不同的文件。

关于java - 每个记录器的动态回退文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844175/

相关文章:

java - android 从maps.google.com路线获取持续时间

python 无法将消息记录到 cmd

linux - 如何配置php5-fpm.log的logrotate?

java - 如何以编程方式在 xml 配置文件中设置属性?

java - 这个错误 'org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance' 是什么意思?

java - 这是一个有效的十六进制值吗?

java - - 使用 Windows 终端导出 x509 证书时文件选项错误

c# - 在 C# 中创建日志

java - 无法让 Logback Eclipse 插件显示输出

java - 使用 EJB3.1 登录