我正在构建一个用于记录日志文件的应用程序。为此,我读取了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。有什么建议吗?
答案 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());
}
}