使用logback appender查找日志文件

时间:2016-06-02 20:58:28

标签: java logging logback

我正在构建一个用于记录日志文件的应用程序。为此,我读取了logback.xml文件配置,按名称选择了一个appender,并将文件的必要信息提取为tail,并在其中提供消息的格式。

现在我只能对具有设置文件名的文件进行尾部记录,并且我正在尝试使用带有图案文件名的文件。但是为了避免对每个可能的模式进行这种复杂的检查,我正在考虑从logger类本身中提取文件的值。在调查之后,我发现RollingPolicyBase类有一个名为getActiveFileName()的方法,我怀疑它有我需要的东西(调用方法时日志文件的文件名),但由于某种原因我甚至找不到记录器的名称。以前有人尝试过类似的东西,或者知道是否可以做到这一点?

我当前的回溯(重要位):

<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”最终为null。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

Logger#getAppender(String)获取当前附加到记录器的追加器。由于"DataRollingFileAppender"已附加到根记录器,因此您需要在LoggerFactory#getLogger(String)上调用Logger.ROOT_LOGGER_NAME以获取包含您的appender的记录器:

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());
  }
}