我对登录有“特殊”要求 - 我需要将每个记录器放在单独的文件中。
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/