SpringBoot应用启动失败,实际报错但未输出日志

395 阅读1分钟

spring-jcl和commons-logging冲突了,删除掉commons-logging就可以了,或者添加以下依赖将两者合并输出也可解决问题:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>

Springboot应用的主类org.springframework.boot.SpringApplication的日志对象默认是从spring-jcl包的org.apache.commons.logging.LogFactory类生成获取,返回的是org.apache.commons.logging.LogAdapter.Slf4jLog或者是org.apache.commons.logging.LogAdapter.Log4jLog#Log4jLog(内部走的还是Slf4jLog),Slf4jLog会自动判断当前用的日志组件是Log4j还是Logback,正常来讲默认使用的也是Logback,且日志配置文件也是按Logback的写的。此时如果引入commons-logging依赖,里面正好也有一个org.apache.commons.logging.LogFactory类,导致SpringApplication的日志对象走了commons-logging的逻辑,其默认日志对象是Log4j,此时如果没有log4j.xml或者log4j.properties配置文件则SpringApplication的日志对象无法正常输出日志,导致Springboot应用启动报错日志也出不来。