如何在SpringBoot子项目中继承父项目的log4j2.xml配置?
Spring Boot子项目继承Log4j2配置问题解答
问题1:输出子项目日志必须在子项目创建log4j2.xml吗?
不用必须。只要父项目的log4j2.xml能被子项目的classpath识别到,子项目就能直接复用这个配置。但要注意两个点:
- 子项目自己别建同名的
log4j2.xml,否则会直接覆盖父项目的配置 - 子项目要确保用的是Log4j2,没被Spring Boot默认的Logback抢走日志控制权
问题2:父项目配置为啥不生效?
你的情况大概率是这几个原因:
- 依赖没搞对:Spring Boot的web等基础starter默认带Logback,要是子项目引了这类starter但没排除Logback,系统会优先用Logback,你的
log4j2.xml等于白写,日志只能走默认控制台输出(就像你看到的类似System.out.println()的效果)。 - 父配置没被打包进去:父项目的
log4j2.xml没放在src/main/resources下面,打包成jar后配置不在classpath里,子项目依赖父项目时读不到这个配置。 - 有其他配置抢优先级:子项目里有别的日志配置文件(比如
logback.xml、log4j.properties),这些文件加载优先级比父项目的log4j2.xml高,导致父配置被忽略。
问题3:父项目配置还有必要吗?子项目配置能捕获父项目日志吗?
- 父项目配置很有必要:你父项目里的通用异常处理类这些会输出日志,这些日志需要父配置来管格式和输出目标;而且以后别的子项目也能直接复用,不用重复写配置。
- 子项目的
log4j2.xml能捕获父项目的日志:日志是全局生效的,子项目启动后,父项目类里的日志组件会自动用子项目的配置,不管是子项目自己的代码还是父项目的通用类,日志都会按子项目的配置输出。
内容的提问来源于stack exchange,提问作者fforfabio
相关产品推荐
相关产品推荐

