使用 logback appender 查找日志文件

Finding the logfile using the logback appenders

我正在构建一个跟踪日志文件的应用程序。为此,我阅读了 logback.xml 文件配置,按名称选择一个附加程序,并将文件的必要信息提取到尾部,以及其中的消息格式。

现在我只能跟踪具有固定文件名的日志文件,并且我正在尝试跟踪具有模式文件名的文件。但是为了避免对每种可能的模式进行这种复杂的检查,我正在考虑从记录器 class 本身提取文件的值。经过调查,我发现 RollingPolicyBase class 有一个名为 getActiveFileName() 的方法,我怀疑它有我需要的东西(调用该方法时日志文件的文件名),但是出于某种原因,我什至找不到它的名字的记录器。有没有人以前尝试过这样的事情,或者知道是否可以这样做?

我目前的logback(重要的部分):

<appender name="DateRollingFileAppender"     class="ch.qos.logback.core.rolling.RollingFileAppender">    
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>logs/jwsgateway.%d{yyyyMMddHH}.log.zip</fileNamePattern>
  <maxHistory>1500</maxHistory>
</rollingPolicy>
<encoder>
    <pattern>%d{dd/MM/yy HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %m%n     </pattern>
</encoder>      

我当前的代码:

private static ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(MyClass.class);
RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender");
filePath=appender.getRollingPolicy().getActiveFileName();

变量 "appender" 最终为空。有什么建议吗?

Logger#getAppender(String) gets an appender that is currently attached to the logger. Since "DataRollingFileAppender" is attached to the root logger, you would need to call LoggerFactory#getLogger(String) on Logger.ROOT_LOGGER_NAME 获取包含您的附加程序的记录器:

import ch.qos.logback.classic.Logger;
import ch.qos.logback.core.rolling.RollingFileAppender;
import org.slf4j.LoggerFactory;

public class Main {
  public static void main(String[] args) {
    Logger logger = (Logger)LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
    RollingFileAppender appender=(RollingFileAppender)logger.getAppender("DateRollingFileAppender");
    System.out.println(appender.getRollingPolicy().getActiveFileName());
  }
}