解决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异常 反射 ...
随机推荐
- java链接并操作数据库
链接准备 MySQL数据库驱动(连接器).mysql-connector-java-x.x.xx.jar会在MySQL安装时提供,若Mysql是默认安装路径,则连接器在:C:\Program File ...
- 用 @Value("${xxxx}")注解从配置文件读取值的用法
1. 用法: 从配置properties文件中读取init.password 的值. @Value("${init.password}") private String init ...
- 【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)
前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶.老师讲得太好了. Java内存模型,感觉以前学得比较抽象.很繁杂,抽象. 这次试着系统一点跟着2个老师学习 ...
- 【UE4 C++】关卡切换、流关卡加载卸载
切换关卡 基于 UGameplayStatics:: OenLevel UGameplayStatics::OpenLevel(GetWorld(), TEXT("NewMap") ...
- ffmpeg剪视频
ffmpeg裁剪合并视频 ffmpeg提供简单的命令参数: ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTP ...
- TX-LCN分布式事务之LCN模式
什么是LCN模式 LCN模式是TX-LCN分布式事务模式的一种,L-lock-锁定事务单元.C-confirm-确认事务模块状态. notify-通知事务单元 原理 LCN模式是通过Spring AO ...
- Java:NIO 学习笔记-3
Java:NIO 学习笔记-3 根据 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 3. JAVA NIO 深入剖析 在讲解利用 NIO 实现通信架构之前,我们需要先来了解一下 NI ...
- 微信小程序实现上拉和下拉加载更多
在上一篇文章中,我们知道了使用 scroll-view 可以实现上拉加载更多,但是由于 scroll-view 的限制,它无法实现下拉加载更多,这篇文章我们使用 view 组件来实现 上拉和下拉加载更 ...
- (二)、Docker 快速入门
文档:https://docs.docker.com/install/linux/docker-ce/centos/ 中文文档:https://docs.docker-cn.com/engine/in ...
- IRCUT作用
IRCUT组成原理 IRCUT由两层滤光片组成,一片红外截止或吸收滤光片和一片全透光谱滤光片 白天是红外截止滤光片工作,晚上是全透滤光片工作,白天摄像头可以接收到人眼无法识别的红外线,会导致图像与肉眼 ...