【发布时间】:2020-06-01 14:43:45
【问题描述】:
我想要动态的 logback appender 属性,可以很容易地添加到 logback 配置文件中,但是尝试设置 appender 的类和名称(它们位于 xml 属性中,而不是 appender 元素下的元素中)。
这是我的 application.yml(硬编码示例的值,但在实际用例中,在部署到 K8s 集群期间,这些值将作为 env 变量从 Helm 传递):
log:
config:
appender:
name: CONSOLE
class: ch.qos.logback.core.ConsoleAppender
这是我尝试访问 logback-spring.xml 中的那些(spring boot version - 2.2.4.RELEASE
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- use Spring default values like patterns -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- declaration of ENV properties: -->
<springProperty name="LOG_CONFIG_APPENDER_NAME" source="log.config.appender.name"/>
<springProperty name="LOG_CONFIG_APPENDER_CLASS" source="log.config.appender.class"/>
<appender name="${LOG_CONFIG_APPENDER_NAME}" class="${LOG_CONFIG_APPENDER_CLASS}">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="${LOG_CONFIG_APPENDER_NAME}"/>
</root>
</configuration>
这会导致以下异常:
ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [${LOG_CONFIG_APPENDER_CLASS}]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ${LOG_CONFIG_APPENDER_CLASS}
所以我的问题是:是否可以动态定义附加程序名称和类?
【问题讨论】:
标签: java spring spring-boot logback