Logback:如何获取日志文件路径?

时间:2016-12-19 19:17:10

标签: java logback

我在我的春季启动应用程序中使用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;

1 个答案:

答案 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();