gpt4 book ai didi

Logback - 如何让每个记录器记录到单独的日志文件?

转载 作者:行者123 更新时间:2023-12-04 14:46:16 24 4
gpt4 key购买 nike

我的应用程序有很多 EJB。当前定制的 Logger 实现会创建一个这样的记录器;

私有(private)静态 Logger logger = Logger.getInstance("SERVICE_NAME");

,并且日志记录将进入一个文件;

(路径)/SERVICE_NAME/SERVICE_NAME.log

我想用 logback 复制这种行为,但是在 logback.xml 配置中获取“记录器”名称时遇到了真正的麻烦。可以在日志 encoder.pattern 中看到,即“%d %-5level %logger{35} - %msg %n”。

有什么想法可以让我把它变成一个属性/变量,然后在元素中使用它?

最佳答案

我有一个部分解决方案。如果我创建自己的鉴别器,则可以使用 logback.xml 中的鉴别器来实现单独的日志文件每个 EJB。

鉴别器;

public class LoggerNameBasedDiscriminator implements Discriminator<ILoggingEvent> {

private static final String KEY = "loggerName";

private boolean started;

@Override
public String getDiscriminatingValue(ILoggingEvent iLoggingEvent) {
return iLoggingEvent.getLoggerName();
}

@Override
public String getKey() {
return KEY;
}

public void start() {
started = true;
}

public void stop() {
started = false;
}

public boolean isStarted() {
return started;
}

}

然后是我的 logback.xml;
    <configuration debug="true" scan="true" scanPeriod="30 seconds">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg</pattern>
</encoder>
</appender>

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="package.to.LoggerNameBasedDiscriminator"/>
<sift>
<appender name="FILE-${loggerName}" class="ch.qos.logback.core.FileAppender">
<FILE>path/to/logs/${loggerName}/${loggerName}.log</FILE>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-50(%level %logger{35}) %msg%n</pattern>
</encoder>
</appender>
</sift>
</appender>

<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="SIFT" />
</root>
</configuration>

这个解决方案似乎有效,但现在我没有基于时间或大小的日志轮换!

关于Logback - 如何让每个记录器记录到单独的日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com