gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:33:33 31 4
gpt4 key购买 nike

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

<?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 的值。那么,我该如何实现呢?顺便说一句,我知道如何以编程方式定义文件附加程序,但这不是我想要的。

非常感谢。

最佳答案

Define a propertylogback.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>

来自 documentation :

A property with context scope is inserted into the context and lasts as long as the context or until it is cleared. Once defined, a property in context scope is part of the context. As such, it is available in all logging events, including those sent to remote hosts via serialization.

所以默认范围,即“本地”可能就足够了。

关于java - 如何在 logback 自动加载 logback.xml 之前定义 logback 变量/属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235296/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com