Logback-如何使每个记录器记录到单独的日志文件中? [英] Logback - how to get each logger logging to a separate log file?
问题描述
我的应用程序有很多EJB.当前的定制Logger实现创建了一个像这样的记录器;
My application has lots of EJBs. The current bespoke Logger implementation creates a logger like this;
私有静态Logger logger = Logger.getInstance("SERVICE_NAME");
,并且日志记录将进入文件;
, and the logging will go into a file;
(路径)/SERVICE_NAME/SERVICE_NAME.log
我想通过logback复制此行为,但是在logback.xml配置中获取"logger"名称时确实遇到了麻烦.可以在日志编码器模式中找到它,即%d%-5level%logger {35}-%msg%n".
I want to replicate this behaviour with logback, but having real trouble grabbing the 'logger' name in the logback.xml configuration. It can be seen in the log encoder.pattern, i.e. "%d %-5level %logger{35} - %msg %n".
有什么想法可以将其转换为属性/变量,然后在元素中使用它吗?
Any ideas how I can get this into a property/variable and then use it in the element?
推荐答案
我有一个部分解决方案.如果创建自己的Discriminator,则可以在logback.xml中使用Discriminator来实现单独的EJB日志文件.
I have a partial solution. If I create my own Discriminator, I can then use the Discriminator in the logback.xml to implement seperate-log-files-per-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;
Then my 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>
此解决方案似乎有效,但是现在我没有基于时间或大小的日志轮换!
This solution seems to work, but now I have no time or size based log rotation!
这篇关于Logback-如何使每个记录器记录到单独的日志文件中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!