背景
任何一个系统在使用的过程中会难免会出现一个错误,但是出现错误之后怎么能够更快速更准确的定位到问题的位置是关键的。这时候就用到了日志,但是更多的工程师只是急于完成功能的开发,而忽略了打印日志信息。其实打印日志信息和开发功能是同等重要的,只有我们在开发功能的时候把打印错误信息配置了,那在以后我们解决发生问题的时候才能提高定位问题的效率。打印日志就相当于程序在和我们说话一样,他会把哪里出现了问题以及为什么出现这种问题都告诉我们,我们解决问题就会更加的容易。如果没有配置错误值日的话,那我们解决问题就像大海捞针一样,非常困难没有头绪。
打印日志好处
1.快速定位问题的位置
2.追踪程序执行的过程
3.记录用户操作的审计日志
4.了解项目的运行状态
错误日志信息
当我们看到一个错误信息的时候我们需要进一步的分析,就拿下面的错误信息来举例子吧
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2023-01-30 10:30:02.865 ERROR 9996 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:185) at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402) at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236) at com.tfjy.arprobackend.ArBackendApplication.main(ArBackendApplication.java:19)
日志分析过程
1、从宏观出发,最先看见的红色部分是提示我们这是个什么样的错误,图中提示的是程序运行失败。
2、我们有了一个大概的了解之后看蓝色部分提示我们错误的类型是什么以及错误类型的地址什么,图中提示的错误类型是ApplicationContextException:应用程序上下文初始化期间引发异常。错误类型的地址是org.springframework.context。
3、看绿色的部分是针对错误类型的一个具体的错误描述:未能启动bean“webServerStartStop”;嵌套异常为java.lang.reflect.UndeclaedThrowableException。
4、看黄色区域的堆栈信息来确定是哪一行代码出现了问题,以及课程发生错误的代码。因为代码之间是有调用关系的,所以堆栈信息会把相关的代码都展示出来,一般处理最上面的一个就可以。