每个记录器的动态回退文件
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 可以动态地将日志分成不同的文件。
我对登录有 "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 可以动态地将日志分成不同的文件。