大家好,我是烤鸭:
     今天分享一下springboot启动后无日志的问题。

1.场景复现

springboot项目启动后卡住无日志,肯定是报错了或者其他原因,并且日志没有打印出来。
    1.1 说一下比较通用常见的场景。
    检查一下 是否 exclude了springboot自带的日志包,放开后可能就有具体的错误原因了。

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.0.5.RELEASE</version><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

 1.2 不太常见的场景
    加载到如下图的地方,直接停了。

或者直接打印 INFO  [class:org.apache.juli.logging.DirectJDKLog | method:log | line:180] logInfo==> Stopping service [Tomcat],没有打印具体的报错信息

是具体报错的地方用的日志框架和你本身项目中的冲突了。
    1.2.1 apollo忘记配置
    比如就拿我们项目来说,apollo少配了一个key,项目直接启动失败,只是报了上面的错误信息,没有报出具体报错信息。
    apollo加载的时候用的日志框架或者版本不一致导致的,一般来说log4j,slf4j,logback这些都会引用,但是版本很难统一,尤其引用了其他的第三方包。
    在apollo那个问题上,将commons-logging的冲突解决后保留 1.1.1 版本,就打印出报错信息了。

<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version>
</dependency>

1.2.2 tomcat版本冲突
    去除第三方引用的不同版本的tomcat依赖,仅保留一个

    <exclusions><exclusion><artifactId>spring-boot-starter-tomcat</artifactId><groupId>org.springframework.boot</groupId></exclusion><exclusion><artifactId>spring-boot-starter-web</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions>

1.2.3 apollo引用的包找不到
    找不到 gson 包,这个和上面那个类似,也是apollo加载的时候失败了,后来日志打印出来了,问题也比较好找,加上gson依赖。

Caused by: java.util.ServiceConfigurationError: com.ctrip.framework.apollo.internals.Injector: Providercom.ctrip.framework.apollo.internals.DefaultInjector could not be instantiatedat java.util.ServiceLoader.fail(ServiceLoader.java:232)at java.util.ServiceLoader.access$100(ServiceLoader.java:185)at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)at java.util.ServiceLoader$1.next(ServiceLoader.java:480)at com.ctrip.framework.foundation.internals.ServiceBootstrap.loadFirst(ServiceBootstrap.java:14)at com.ctrip.framework.apollo.build.ApolloInjector.getInjector(ApolloInjector.java:20)... 26 common frames omittedCaused by: com.ctrip.framework.apollo.exceptions.ApolloConfigException: Unable to initialize Guice Injector!at com.ctrip.framework.apollo.internals.DefaultInjector.<init>(DefaultInjector.java:30)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at java.lang.Class.newInstance(Class.java:442)at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)... 30 common frames omittedCaused by: com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: Lcom/google/gson/Gson;

 1.2.4 项目改成打包lib目录后,部分包打包不完整
    这个问题是最棘手了,找了一天,之前由于项目打jar包过大,想把jar和第三方不常用的包分开,打成jar和lib,具体可以看这篇。
    https://blog.csdn.net/Angry_Mills/article/details/105024664

同样的pom依赖,在改成lib之后就启动停止,INFO  [class:org.apache.juli.logging.DirectJDKLog | method:log | line:180] logInfo==> Stopping service [Tomcat]。
    只能把原来的100多M的jar解压缩后和新方式打的lib目录做对比,最后发现第三方包在循环依赖后打包有问题,大小也不一样。lib目录只打了自己那层,没有打循环依赖那些包,导致加载的时候报错了。

2.解决思路

总结一下,出现的问题场景。
    2.1 springboot 本身日志被排除了,tomcat版本不一致
    2.2 apollo找不到key 由于 commons-logging 版本过高
    2.3 找不到gson包
    2.4 打包lib目录后,循环依赖的包和单次依赖打包大小不一致,导致部分类缺失
    如果项目是个新项目,搭建工程的时候尽量保证使用的第三方包的兼容性。如果是老的项目,加新包的时候要注意,尽量避免冲突,以之前的包为准。

springboot启动后卡住 无日志的几种情况相关推荐

  1. Springboot启动后频繁打印错误日志 /null/swagger-ui.html解决方案

    Springboot启动后频繁打印错误日志 /null/swagger-ui.html解决方案 报错信息 解决办法 报错信息 2019-05-30 12:59:48.331 WARN 5032 --- ...

  2. springboot启动后controller访问404

    首先需要在springboot的启动类上面使用@SpringBootApplication注解,并且指定扫描的包的位置,如下: package com.example; import org.spri ...

  3. 【问题解决】springboot启动后一小会就自动停止,提示Process finished with exit code 0

    最近springboot启动后一小会就自动停止,没提示具体报错,只有提示: Disconnected from the target VM, address: '127.0.0.1:60011', t ...

  4. 关于初学者出现Springboot启动后 服务器可以访问但不能跳转到页面

    关于初学者出现Springboot启动后 服务器可以访问但不能跳转到页面 在这里我是一个小白 针对自学SpringBoot所产生的问题进行解释 首先我创建的包是这样的,在项目启动后能够正常的启动Tom ...

  5. springboot 启动后打印_SpringBoot实战(五):配置健康检查与监控

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 众所周知,系统预警是一件十分重要的事情,系统一旦出现宕机很有可能许多真金白银就进去了: ...

  6. 如何在SpringWEB项目或者Springboot启动时直接执行业务代码(三种方式)

    我的博客原文链接 前言 通常的我们的项目开发中,经常会遇到那种在服务一启动就需要自动执行一些业务代码的情况.比如将数据库中的配置信息或者数据字典之类的缓存到redis,或者在服务启动的时候将一些配置化 ...

  7. SpringBoot启动后不报任何错误自动停止

    在启动SpringBoot时后台日志没有报出任何异常或者错误然后就自动停止了,启动日志如下: 查看红框框出来的日志时西东shutdown了,解决方法如下: 在maven的pom文件里面加入依赖: &l ...

  8. 解决springboot无法访问此网站,springboot启动后无法访问网站

    在学习spring boot以及mybatis时遇到了启动springbboot项目后在浏览器上无法访问,新建项目有时候能解决但是遇到问题一直避开也不是问题,终于让我发现了原因. 无法访问图如下: 在 ...

  9. MAC IDEA启动后卡住不动

    idea启动微服务项目的时候,卡住不动,之前一直以为是MAC M1 不兼容 问题解决: 在类方法上有个红色菱形方块,点一下取消了就好. 问题现象: Connected to the target VM ...

最新文章

  1. Idiomatic Python手记一: average in FP way
  2. centos 下载 哪个版本_生信分析平台搭建(十六):CentOS
  3. 如何修改 asp.net core 5 程序的默认端口号?
  4. PowerPivot 和 SQL Azure 快速入门
  5. jQuery源码学习(一)
  6. 修改了下exeScope的导出函数功能,让它只导出函数名。。。
  7. android 音效下载地址,V4A+Dolby Atmos安卓全局音效
  8. 汇编语言:将ASCⅡ码表示的十进制数转换为二进制数/十六进制数
  9. 实验任务(四)---恶意代码技术
  10. 2019ug最新版本是多少_UGNX将在2019年隆重发布最新版本,也是最后一个版本,让你我都想不到的是..........
  11. 指纹识别、图形识别、aliOCR 识别
  12. firefox渗透安全插件汇总
  13. 【精华】安卓开发学习路线规划
  14. HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板
  15. android 屏蔽系统输入法自定义输入法的详解
  16. Google Colab中把pyth3.7版本更换成python3.6(tensorflow1.13)
  17. Word中设置论文参考文献对齐方法
  18. 2022年天猫女王节的优惠力度比肩618年中大促购物节
  19. imx8mqevk OPTEE 全系统构建
  20. 【台大郭彦甫】Matlab入门教程超详细学习笔记六:高阶绘图(附PPT链接)

热门文章

  1. 工作333:uni-增加添加成功提示
  2. [css] 你有用过animation-fill-mode属性吗?它有什么应用场景
  3. [vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗?
  4. 工作107:vue调用视频接口
  5. 前端学习(2334):angular之内置属性指令ngclass
  6. 前端学习(1944)vue之电商管理系统电商系统之绘制分类组件的基本结构
  7. 前端学习(1672):前端系列实战课程之加速减速运动
  8. spring学习(9):idea的config配置
  9. 第十九期:程序员节,女朋友偷偷送了我这个...
  10. win10如何修改IP地址