解决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异常 反射 ...
随机推荐
- 题解 2020.10.24 考试 T3 数列
题目传送门 题目大意 给出一个数 \(n\),你要构造一个数列,满足里面每个数都是 \(n\) 的因子,且每一个数与前面不互质的个数不超过 \(1\).问有多少种合法方案. 保证 \(n\) 的不同质 ...
- pytest执行时mian函数传参
在代码中执行pytest可以通过main函数 加参数来指定运行规则时,参数需要放在列表或者元祖中 # pytest.main(["--html=report.html"]) # p ...
- 2021-5-15 vj补题
C - Win or Freeze CodeForces - 151C 题目内容: You can't possibly imagine how cold our friends are this w ...
- 提高微信小程序的应用速度
一.是什么 小程序启动会常常遇到如下图场景: 这是因为,小程序首次启动前,微信会在小程序启动前为小程序准备好通用的运行环境,如运行中的线程和一些基础库的初始化 然后才开始进入启动状态,展示一个固定的启 ...
- Matlab/Modelsim图像联合仿真平台
FPGA图像仿真平台 1 引言 在使用modelsim进行图像算法的功能仿真时,无法得到图像的实时预览,因此直观性有所欠缺.因此可配合matlab使用,通过modelsim读出txt格式的图像,利用m ...
- 从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)
纸上得来终觉浅,绝知此事要躬行 注意: 本文 SpringBoot 版本为 2.5.2; JDK 版本 为 jdk 11. 前言: 前文:你了解SpringBoot启动时API相关信息是用什么数据结构 ...
- Gitlab Burndown Chart
一.说明 通过调用gitlab api直接获取相应project的所有issues,然后对其进行统计以制作燃尽图 二.方法 1.生成 Personal access token Gitlab > ...
- Scrum Meeting 最终总结
[软工小白菜]Scrum Meeting 最终总结 2020/4/28 一.会议内容 1.工作及计划 组员代号 完成的工作 明日计划 炎龙 1.整合了整个程序,生成了apk并且上传审核 无 风鹰 1. ...
- geos编译问题
gdal编译geos的时候会用到geos_c_i.lib这个文件,我用cmake编译的时候仅仅产生geos_c.lib这个文件,所以只能使用nmake的编译方式来编译geos库,nmake编译geos ...
- PCIE学习笔记--TLP Header详解(三)
目录篇地址为:http://blog.chinaaet.com/justlxy/p/5100053481 Completions Completions的TLP Header的格式如下图所示: 这里来 ...