使用 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());
}
}
我正在构建一个跟踪日志文件的应用程序。为此,我阅读了 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());
}
}