我的应用程序有很多 EJB。当前的定制 Logger 实现创建一个像这样的记录器;
私有静态 Logger logger = Logger.getInstance("SERVICE_NAME");
,并且日志记录将写入文件;
(路径)/SERVICE_NAME/SERVICE_NAME.log
我想用 logback 复制此行为,但在 logback.xml 配置中获取“logger”名称时遇到了真正的麻烦。可以在日志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>
这个解决方案似乎有效,但现在我没有基于时间或大小的日志轮换!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)