logback.xml读取application.properties属性值如何实现条件判断?
问题原因
你使用的#{}是Spring提供的SpEL表达式语法,仅在Spring管理的上下文环境中会被解析。而logback配置的加载时机早于Spring容器初始化,logback本身不支持SpEL表达式,因此会将整段表达式识别为普通字符串输出,不会执行计算逻辑。
正确实现步骤
1. 引入条件判断依赖
logback的条件判断功能依赖janino编译库,需先在项目中引入依赖(Spring Boot项目可省略版本号,由父工程统一管理兼容版本):
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> </dependency>
2. 读取application.properties属性
如果是Spring Boot项目,使用Spring扩展的springProperty标签读取配置文件属性,可直接识别application.properties中的配置项:
<springProperty scope="context" name="serviceName" source="name"/>
source对应application.properties中的配置键名,name为后续在logback中引用的变量名。
如果是非Spring Boot项目,先加载application.properties配置文件:
<property resource="application.properties" />
3. 使用logback自带条件标签做判断
logback原生支持<if>、<then>、<else>标签实现条件逻辑,按如下方式配置即可得到目标值:
<if condition='property("serviceName").equals("UserService")'> <then> <property name="myprop" value="1" /> </then> <else> <property name="myprop" value="2" /> </else> </if>
- 字符串比较必须使用
equals方法,不要使用==运算符,避免对象地址比对导致的判断失效。
内容的提问来源于stack exchange,提问作者vishal palla
相关产品推荐
相关产品推荐

