如何在 logback 自动加载 logback.xml 之前定义 logback 变量/属性?

2024-04-19

我的公司有一个环境管理工具,使您能够使用 Java 以编程方式从环境中查找属性。我想利用这个工具来配置 logback。例如,假设我有一个 logback.xml 如下(特别是文件附加器部分):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- console appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %-5level %logger{20}: %msg%n</pattern>
        </encoder>
    </appender>

    <!-- file appender -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${LOG_FILE:-/default/log/file/path</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd/HH:mm:ss.SSS} [%thread] %-5level %logger{20}: %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

所以,在这种情况下,我想查找LOG_FILE来自环境(或操作系统,如果你愿意)的属性,并在 logback 加载 logback.xml 之前将其传递给 logback,以便它知道以下值LOG_FILE。那么,我怎样才能实现这一目标呢?顺便说一句,我知道如何以编程方式定义文件附加器,但这不是我想要的。

非常感谢。


定义一个属性 https://logback.qos.ch/manual/configuration.html#variableSubstitution in logback.xml并将其加载到“上下文”中:

<property scope="context" name="logfolder" value="${location.of.the.log.folder}" />

然后定义引用属性的附加程序:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${logfolder}/logfile.log</file>
    <append>true</append>
    <encoder>
        <pattern>[%d{ISO8601}] [%p] [%t] [%c] [%m]%n</pattern>
    </encoder>
</appender>

来自文档 https://logback.qos.ch/manual/configuration.html#scopes:

具有上下文范围的属性被插入到上下文中并持续存在 只要上下文或直到它被清除。一旦定义,一个 上下文范围内的属性是上下文的一部分。因此,它是 在所有日志记录事件中可用,包括发送到远程主机的日志记录事件 通过序列化。

因此,默认范围“本地”可能就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 logback 自动加载 logback.xml 之前定义 logback 变量/属性? 的相关文章

随机推荐