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

标签 java logback

我在 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/

相关文章:

java - JVM 前 4 个 boolean 值优化,而不是第 5 个

javax.crypto.IllegalBlockSizeException : Input length must be multiple of 16 when decrypting with padded cipher

java - 如何排除 Maven 插件的直接依赖

java - 当两个 logback.xml 在 Websphere 服务器上运行时日志被合并

java - 迭代列以查找具有最后一个非零值的列

java - 为什么PDFBox在转换为图像文件时会删除矩形线

logging - 拦截来自 Ant 的 Commons 日志记录

java - Logback 属性值未定义

java - logback:使用 groovy 配置时如何区分测试和主要日志记录?

mongodb - 如何使用 logback 鉴别器值来过滤 mongodb 插入