一、统计接口耗时
通过日志记录接口耗时情况对于性能监控、故障排查等方面具有非常重要意义。而实现这一功能的方式多种多样,包括使用AOP、拦截器、日志框架以及性能监控工具等。下面是对这几种实现方式的优缺点进行总结:
1.AOP
优点:代码解耦,复用性强,易于维护。
缺点:可能增加系统复杂度,性能略有损耗(毕竟要生成代理)。
2.性能监控工具
优点:功能全面,可视化强,易于分析。
缺点:可能引入外部依赖,成本较高。
3.拦截器
优点:与Spring MVC等框架集成好,实现简单。
缺点:只能用于Web层,不能跨应用层。
我们将使用SpringBoot自带的一种简单且强大的实现方式来帮助我们高效地监控接口性能,当请求到达Servlet处理程序时,Spring就开始记录当前请求的耗时情况了,当请求处理完成后,会以事件的方式发布当前请求详细信息。
示例代码如下:
创建一个控制层
启动程序,调用接口访问
我们查看控制台上打印出了请求接口相关的耗时信息。
二、Controller接口调试
对Controller接口的请求参数、请求Header和响应结果进行日志输出是非常必要的。以下是一些常见的情况:
- 问题排查:当接口出现错误或异常行为时,通过查看日志中的请求参数和Header信息,可以快速定位问题发生的上下文,比如是否传入了错误的参数、缺失了必要的Header等。同时,响应结果的日志也能帮助确认后端处理逻辑是否正确执行,以及错误是否由后端逻辑导致。
- 安全审计:在涉及敏感数据或高安全要求的系统中,记录请求和响应的详细信息有助于进行安全审计。通过检查日志,可以追溯敏感数据的流向,识别潜在的危险行为。
- 监控与报警:将日志信息集成到监控系统中,可以实时监控接口的运行状态。当接口出现异常或性能指标超出阈值时,系统可以自动触发报警,及时通知相关人员进行处理。
其实在大多数情况下,我们进行详细信息的输出都是为了问题的排查。至于安全审计,监控与报警通过日志的方式应该是应用的非常少的。
在SpringBoot项目中,为了输出详细的接口请求信息,我们可以通过如下的方式进行日志级别调整。
示例代码如下:
请求该接口,日志输出
针对该接口确实输出的信息比较多了,有请求的有响应,但是发现关键信息都被掩码了,这对我们调试接口没有任何的帮助。通过如下配置,开启请求明细信息输出。
开启该属性后,日志输出
关键的信息都输出了,这非常有助于接口调试,生产环境相信你绝对不可能这样输出日志的。
三、404问题
当我们访问一个不存在的接口时,默认情况下会输出如下错误信息(这会根据你当前请求header中的accept来决定输出格式)
浏览器访问不存在的接口。
我们需要在配置文件添加2个配置
设置一个全局异常处理类
我们再次请求接口,这次返回了规定格式的错误信息。