Logback多Spring Profile配置:让console-logging覆盖文件日志
解决Logback多Spring Profile激活时console-logging覆盖file-logging的问题
问题根源
Logback的<springProfile>逻辑是匹配即生效:只要激活的Profile包含配置中指定的标识,对应段的配置就会加载。当你同时激活file-logging1和console-logging时,两段配置会同时生效:
file-logging1中的com.xxx.xxx日志器设置了additivity="false",会拦截该包的日志,不让它传递到root日志器console-logging中的root日志器虽然配置了控制台输出,但com.xxx.xxx的日志被前者拦截,同时其他日志可能受现有配置影响无法输出,最终出现只写文件、无控制台日志的情况
实现覆盖的解决方案
要让console-logging激活时完全禁用文件日志配置,需给文件日志的Profile添加排除条件,同时确保控制台配置覆盖所有必要的日志输出:
1. 修改文件日志的Profile条件
给文件日志的<springProfile>添加!console-logging,表示仅当console-logging未激活时,文件日志配置才生效:
<springProfile name="file-logging,file-logging1 & !console-logging"> <logger name="com.xxx.xxx" additivity="false" level="DEBUG"> <appender-ref ref="HTTP-DEBUG"/> </logger> </springProfile>
2. 完善控制台日志的配置
如果需要com.xxx.xxx包的日志也输出到控制台(和文件日志的级别保持一致),在console-logging的配置中添加对应日志器:
<springProfile name="console-logging"> <logger name="org.springframework" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <!-- 添加对应包的控制台日志配置,和文件日志级别对齐 --> <logger name="com.xxx.xxx" level="DEBUG" additivity="false"> <appender-ref ref="CONSOLE"/> </logger> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> </root> </springProfile>
效果验证
- 仅激活
file-logging1时:文件日志配置生效,日志写入文件 - 激活
file-logging1,console-logging时:文件日志配置因排除条件不生效,控制台配置完全生效,所有日志仅输出到控制台
内容的提问来源于stack exchange,提问作者Stefano Maglione
相关产品推荐
相关产品推荐

