解决springboot启动日志异常问题
问题描述:springboot启动异常,启动后没有日志打印。
问题原因:slf4j日志实现重复,找不到对应实现类。
问题应对:
1. 是不是项目没起来---->打印的日志数据,到这里就不打印了,在run方法后面加了一行输入print,当启动之后使用debug,能运行到此行,说明正常启动成功的。
2.是不是日志框架冲突导致的--->把日志相关的pom以来都注释,发现print的能打印出来,log.info 相关的打印不出来。
把绑定的两块实现类都找了一下:
[jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/org/slf4j/slf4j-log4j12/1.7.32/slf4j-log4j12-1.7.32.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2.1 继续跟下去 slf4j-log4j12 这么抢手,好几处都用到了它

spring-boot-starter-log4j2 依赖的是这个版本log4j-slf4j-impl


SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/org/slf4j/slf4j-log4j12/1.7.32/slf4j-log4j12-1.7.32.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
log4j:WARN No appenders could be found for logger (org.springframework.boot.ApplicationServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.3)
3.1 问题找到了,解决方案开始实施:
我这里就把对应的日志:排除掉了,目前排除的是这个:
spring-boot-starter-log4j2 依赖的是这个版本log4j-slf4j-impl ,百度到的消息说这是个桥接包
日志框架:slf4j
日志实现:log4j2
桥接包:log4j-slf4j-impl
桥接包log4j-slf4j-impl起到适配的作用,因为市面上的日志实现互不兼容,日志框架slf4j要想适用于日志实现log4j2,就需要使用桥接包
具体啥情况咱也不太懂,反正我是认为排除一个依赖就该能运行了吧? 当时是在这里
spring-boot-starter-web 进行的依赖排除,我发现并没有排除掉依赖,我就百度搜了一下,然后从springboot的基础上进行排除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖排除掉之后发现并没有达到预期的结果,还是这样,除了爆红的几条明晃晃的信息之外,没有其他的消息了,调用输出的日志信息也没有正常显示出来,通过debug也没有异常,我慌了,
然后进行百度,
No appenders could be found for logger (org.springframework.boot.ApplicationServletEnvironment).
这条有效信息进行百度的结果都是spring的方式启动的,然后都是提示让本地加log的properties文件,尝试的加上了,结果还是老样子。
第二条有效信息进行百度:
Please initialize the log4j system properly.
log4j:WARN No appenders could be found for logger (org.springframework.boot.ApplicationServletEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
(54条消息) No appenders could be found for logger_u013412790的专栏-CSDN博客
按照博客的说明,我按照第二条的的方式,把配置加到项目最上方
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.8.2</version>
</dependency>
启动之后,发现日志能正常打印出来了,心里别提多高兴了!
接下来,看看是否还需要配置文件,把配置文件删除,发现还能正常使用。到此处问题已经解决。
最后:不光要解决问题,以后遇到类似的问题要知道怎么解决和排查,要知其人并知其所以然。
找到了官方网站:http://www.slf4j.org/manual.html
日志的实现框架大概有以下几种:那么 slf4j-log4j12是哪个日志框架呢?

点击进去发现说: http://logging.apache.org/log4j/1.2/index.html
2015年8月5日,伐木服务项目管理委员会宣布Log4j 1.x已结束使用。有关公告的完整文本,请参阅阿帕奇博客。建议 Log4j 1 的用户升级到阿帕奇日志 4j 2。
点进去:http://logging.apache.org/log4j/2.x/index.html

看导入pom是这样导入的
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
--------------------------------------------------------------------------------------------------------------------------
上面的因为日志找不到而导致的异常,今天我就想把日志集成到
log4j2版本上去,发现了奇怪的一幕,目前还是两个实现类,而且实现的是随机使用一个实现类
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/ch/qos/logback/logback-classic/1.2.4/logback-classic-1.2.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/ruanjian/apache-maven-3.0.3-NEW/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
配置输出日志:
logging.level.root=INFO
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}[%line] TraceId[%X{PFTID}] - %msg%n
解决springboot启动日志异常问题的更多相关文章
- 解决spring-boot启动异常Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
第一种: 需要在主类头加上 @EnableAutoConfiguration 第二种: pom文件是否加了 <dependency> <groupId>org.mybatis ...
- 解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE
问题 如下: 2017-07-16 08:50:57.436 INFO 13524 --- [ main] c.p.p.web.PointshopWebApplication ...
- 解决springboot启动失败问题:Unable to start embedded container;
将一个springboot项目导入到eclipse后,启动时报错Unable to start embedded container,以下时全部错误信息: Application startup fa ...
- springboot启动报异常,Failed to load property source from location 'classpath:/application.yml'
学习springboot,在启动时抛出下图异常 往下看异常信息,找到异常的具体位置 找到application.yml文件的对应位置,发现params配置前面多了空格 去掉空格重新启动,可以了 写代码 ...
- 解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)
问题 如下: 2017-07-16 08:50:57.436 INFO 13524 --- [ main] c.p.p.web.PointshopWebApplication ...
- 清理忽略springboot控制台启动的banner和启动日志
清理忽略springboot控制台启动的banner和启动日志 1.springboot的banner spring: main: banner-mode: off 2.mybatis-plus的ba ...
- SpringBoot使用MongoDB异常问题
一 环境介绍 SpringBoot1.5.13.RELEASE(本地) Spring Data MongoDB Java 8 MongoDB(青云) 二 问题描述 使用Studio3T或者Compas ...
- springboot启动的时候日志缺少Mapping日志等
发现启动springboot日志不全 缺失启动日志如: 正常启动日志 解决办法: 更换较低版本的spring boot父级依赖. <parent> <groupId>org.s ...
- 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题
通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署 ClassCastException异常 反射 ...
随机推荐
- MySQL初步学习——2021.09.27每日总结,第四周周一
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了SQL语句的分类: SQL语句很多,分为 1.DQL:数据查询语言(凡是带有select关键字的都是查询语句) 2 ...
- qsort()函数的使用
函数声明 void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*)) 参数 ...
- Linux系统安装MySql5.7并通过sql脚本导入数据
为了下载到的MySQL版本和目标系统相互兼容,在开启之前,最好了解目标系统的相关信息. 查询系统版本: cat /etc/issue 查看系统位数 getconf LONG_BIT 选择MySQL 根 ...
- 《JavaScript DOM编程艺术》:+= 相加之后再赋值
第2章 第20页 += var year = 2010; var message = "The year is"; message += year; message += yea ...
- 【UE4 设计模式】观察者模式 Observer Pattern
概述 描述 定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做 发布-订阅(Publish/Subscribe)模式 模型-视图(M ...
- ShardingSphere-初见
目录 概述 认识shardingjdbc shardingjdbc功能架构图 认识Sharding-Proxy 三个组件的比较 ShardingJdbc混合架构 ShardingShpere的功能清单 ...
- linux cut
参考:Linux cut 命令详解_Linux_脚本之家 (jb51.net) 参考:cut命令_Linux cut 命令用法详解:连接文件并打印到标准输出设备上 (linuxde.net)
- hdu 1848 Fibonacci again and again (SG)
题意: 3堆石头,个数分别是m,n,p. 两个轮流走,每走一步可以选择任意一堆石子,然后取走f个.f只能是菲波那契中的数(即1,2,3,5,8.....) 取光所有石子的人胜. 判断先手胜还是后手胜. ...
- [Stoi 2031]枫
简单之至的题解 \(Luogu\) 比楼上的简单,代码只有二十行 首先看题的时候发现这个无法做到直接求 因为数据范围好像有点超乎想象 但是对于这种递推的题来说一般就是从小的往大的推 那么我们递推的过程 ...
- Loto实践干货(8) 实测 保险丝 用示波器带电流探头
本文用LOTO示波器和5A的电流探头来实验两种常见类型的保险丝的保护曲线.一种是熔断型的,另一种是自恢复型的.我们通常需要在一些电路中对电流过大的情况做保护,比如防止用户把输出源短路,比如防止用户对电 ...