Logback-如何使每个记录器记录到单独的日志文件中? [英] Logback - how to get each logger logging to a separate log file?

查看:671
本文介绍了Logback-如何使每个记录器记录到单独的日志文件中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序有很多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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆