我在我的春季启动应用程序中使用Logback并且它工作正常,但我需要以编程方式获取我用登录程序登录/写入的文件的绝对路径&#39 ; s name" 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>
我需要编写一个方法来回报&#34; /home/sysadmin/logs/audit.log &#34;
答案 0 :(得分:1)
您可以在spring和logback之间共享属性文件。或者您可以以编程方式访问context
范围的logback属性。或者你可以挖掘你的logback上下文来寻找appender。
<强> 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集成。
你可以直接从appender得到它,但你需要更多狡猾的演员:
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();