SpringBoot 2.1.3下Logback上下文重命名失败问题求助
问题解决:SpringBoot 2.1.3 Logback上下文名称重复设置报错
问题原因
报错核心是Logback上下文被命名后无法再次修改名称。你的配置中,logback-spring.xml里的<contextName>先通过varname的默认值abc初始化了上下文名称,之后SpringBoot加载application.properties中的spring.application.name=myproject,尝试将上下文名称替换为myproject时,发现上下文已有名称,因此抛出异常。
解决方案
方案一:通过SpringBoot配置直接设置Logback上下文名称
无需在logback-spring.xml中编写<contextName>标签,直接在application.properties中添加以下配置:
logging.logback.context-name=${spring.application.name}
同时可以去掉logback-spring.xml中的以下内容:
<contextName>${varname}</contextName>
如果varname变量没有在其他地方使用,也可以删除对应的<springProperty>配置:
<springProperty scope="context" name="varname", source="spring.application.name" defaultValue="abc"></springProperty>
方案二:修正logback-spring.xml配置(保留内部设置)
若坚持在logback-spring.xml中设置上下文名称,需确保名称仅被设置一次,且依赖SpringBoot的配置加载顺序:
- 先移除
<springProperty>标签中的冗余逗号,并调整默认值避免提前初始化上下文:
<springProperty scope="context" name="varname" source="spring.application.name" defaultValue=""></springProperty>
- 使用
<if>标签(SpringBoot 2.1.3已集成相关依赖),仅当varname有值时设置上下文名称:
<if condition='property("varname") != ""'> <then> <contextName>${varname}</contextName> </then> <else> <contextName>abc</contextName> </else> </if>
此方式相对复杂,更推荐方案一。
额外注意
你的logback-spring.xml中<springProperty>标签里的逗号属于冗余语法,比如name="logPath", source="..."中的逗号应删除,修正后的标签如下:
<springProperty scope="context" name="logPath" source="myapp.log.path" defaultValue="/home/logs/myappLog"></springProperty>
内容的提问来源于stack exchange,提问作者Nick Dong
相关产品推荐
相关产品推荐

