我在 Spring Boot 应用程序中使用 Logback,它工作正常,但我需要以编程方式获取我正在使用附加程序名称“FILE-AUDIT”登录/写入的文件的绝对路径。
为了更清楚,给出下面的 xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_ROOT" value="/home/sysadmin/logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%-5level] - %msg%n
</Pattern>
</encoder>
</appender>
<appender name="FILE-AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_ROOT}/audit.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%-5level] - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_ROOT}/archived/audit.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.globant.corp.kit" level="info" additivity="false">
<appender-ref ref="FILE-AUDIT" />
</logger>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
我需要编写一个方法来返回“/home/sysadmin/logs/audit.log”
最佳答案
您可以在 spring 和 logback 之间共享属性文件。或者您可以通过编程方式访问 context
作用域的 logback 属性。或者您可以深入挖掘 logback 上下文来查找附加程序。
logback.xml
<configuration>
<property scope="context" name="abc" value="xyz"/>
</configuration>
java
import ch.qos.logback.classic.LoggerContext;
public static void main(String[] args) {
LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
System.out.println(context.getProperty("abc"));
}
或者将属性文件从类路径导入到您使用的 logback 中:
<configuration>
<property resource="resource1.properties" />
</configuration>
这两种解决方案都意味着您必须将 /audit.log
移动到属性中。属性文件解决方案可能更容易与 spring 集成。
您可以直接从附加程序获取它,但您需要更多狡猾的强制转换:
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger = context.getLogger("com.globant.corp.kit");
RollingFileAppender<ILoggingEvent> xyz = (RollingFileAppender<ILoggingEvent>) logger.iteratorForAppenders().next();
TimeBasedRollingPolicy rollingPolicy = (TimeBasedRollingPolicy) xyz.getRollingPolicy();
rollingPolicy.getFileNamePattern();
关于java - Logback:如何获取日志文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41229521/