web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目
一、业务场景
最近在开发新功能,新功能主要就是写app的首页查询接口,接口比较多有十几个,首页会有各种查询,新增操作比较少。由于用户量
比较大,据说并发量不小,所以首页的很多查询都做了缓存处理,用来提升查询效率。这次写的接口还是比较复杂,需要进行数据的各种处理,
比如排序,过滤,各种其他业务的处理。并且调用的时候,不是自己项目调用,而是提供给其他项目组调用,需要进行联合调试。
二、需求分析
项目的大致调用情况如下:
自己所在的项目组属于项目B这个位置,数据首先从项目A过来,然后在项目B这里存储、加工处理后,在给项目C提供调用,最后返回
给APP.这其中还是省略了各种网关拦截之类的操作。总之APP想拿到项目B的数据,经过的流程会比较多,如果任意一个环节出现问题,都有
可能导致手机APP获取不到数据。因此在写调用接口的时候,打印日志就很有必要了,主要作用就是用于排查问题。如果出现问题之后,排查
问题最简单、快捷的方式就是通过日志来定位问题。由于项目的限制,生产环境的数据库是看不了的,只能通过日志来进行排查问题。
三、解决方案
那写接口的时候,需要打印哪些日志呢?
.a.第一个地方就是请求参数的日志,请求一个接口时,参数信息有哪些,这个是在排查问题的时候,首先要看的关键信息。可以查看请求的参数
对不对,是不是符合接口的要求等等。
.b.第二个需要打印日志信息的地方就是获取的数据信息,比如某一个接口请求时,返回的数据信息。如果信息信息比较多,则只需要打印返回的
数据量信息即可,比如返回多少条,或者打印其中一条数据信息。数据处理的时候,一般都是统一处理,如果某一条数据没问题,那其他数据也
不会有问题。在比如新增数据的时候,将新增数据返回的ID打印在日志中,非常方便排查问题。
.c.第三个需要打印的就是关键位置的操作,比如从缓存中获取数据时的key信息,需要打印到日志中;获取的一些关键的缓存数据也需要打印在
日志中,可以排查缓存中的数据是否正确。自己在进行数据过滤之前会打印一下数据总数,数据返回前会打印一下数据的总数,看看是否正常。
在进行过滤操作的时候,如果有明显异常的操作,也会打印错误日志。
.d.异常信息需要打印在日志中,将异常信息打印在日志中,非常有助于排查具体问题,到底是哪些原因引起的异常等等。
.e.一些比较耗时的操作或者是非常重要的操作,添加一个操作时间统计,便于排查、分析某个操作所花的时间是多久,是否影响程序的正常执行等等。
上面就是自己在开发中打印日志的一些操作,有更好建议的小伙伴欢迎留言讨论。
2022-10-23.
记录最近几次真实问题排查的情形。
情形一:测试人员在测试系统性能的时候,发现有两个接口的性能不达标,让我们开发人员去排查是什么原因导致的。自己拿到接口信息之后,立即去
排查问题,因为这两个接口都是自己写的,对于接口里面的逻辑还是比较清楚的。问题是出在将我们的系统迁移到一个新的服务器上去之后,查询才变
得非常缓慢,有几次请求差不多大概20S的时间,虽然有些夸张,但这也是事实。
首先能够想到的就是查看日志,可是自己没权限查询新服务器的日志,只能等待负责人去进行查看日志信息。不久之后,负责人发了几张日志的截图
丢在群里面,从打印的日志信息来看,自己写的代码打印的日志还不足以排查当前遇到的问题。这就很尴尬,没办法只能继续添加打印的日志,然后重新
部署后去查看日志信息。在这个接口中,调用了多个方法来处理数据,比如A->B->C->D等等,首先获取数据,可能是从缓存中取的,也可能是查询数据库的。
其次是数据过滤,再次是数据处理,最后一步是数据转换。由于自己只打印了少量日志,不能准确的判断出问题是出在哪里。改进后,在这四个方法后面
都添加了关键位置的日志打印信息,就可以知道每一个方法执行时所花的时间大概是多少。重新部署后,再次测试,果然发现问题,问题就出在数据过滤
的时候,执行时间太久导致出现问题。找准问题后,自己也知道怎么去优化代码,从哪里下手,花了约一个小时之后,问题解决。
自己从这次吸取到的经验教训就是,关键位置一定需要打印日志,这非常有助于排查各种BUG,不然之后这些地方的日志也需要重新补上,这样才能
较为准确的去定位错误信息,才能更好的判断是什么原因导致的问题。问题找到后,修复问题相对来说就会轻松一些。
web项目开发写接口时,为什么需要在关键位置打印日志-2022新项目的更多相关文章
- 学web前端开发写给新手的建议,超实用!
01 前面的话 如今我们使用的互联网,客户端与服务器端的交互无时无刻不在发生.比如我们在浏览器打开网页,浏览器就是客户端,将网页数据发过来的也就是服务器.其实服务器,并没有什么特别的,也就是一台昼夜不 ...
- 项目开发中Maven的单向依赖-2022新项目
一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...
- Java异步记录日志-2022新项目
一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...
- redis缓存恢复-2022新项目
一.业务场景 Web项目开发中,为了加快数据处理的的效率,大量的使用了各种缓存,缓存技术主要使用的是redis.导致出现的小小的 问题是对redis缓存形成了一个比较强的依赖,并且有的数据暂时是没有同 ...
- mybatis-拦截器实际应用-替换表名-2022新项目
一.业务场景 考虑到新项目中部分与业务数据相关的表在后期数据量会比较大,架构师在最开始设计项目中与业务数据相关的表时,就已经考虑使用分表来 进行处理,给业务数据相关的每张表都添加统一批次的后缀,查询这 ...
- Light项目---实现后端接口时遇见的一些问题
ImproperlyConfigured: WSGI application 'lightapi.wsgi.application' could not be loaded; 在moddleware中 ...
- 在php中写接口时 对json格式的转换 简单的方法
方法 一 方法二 可以通过urlencode();遍历出来
- .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)
阅读目录: 1.开篇介绍 2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象 2.2.迭代单元 ...
- git实战-多分支开发-2022新项目
现在开发中大多数公司中都在使用Git这个代码版本管理工具,几乎可以说是已经成为标配,刚入职不久的这家新公司也不例外. 去公司没多久,开始搭建项目,然后创建开发分支,有多少个后端人员就创建多少个开发分支 ...
- postgresql使用group by进行数据去重-2022新项目
一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...
随机推荐
- 【SpringBoot】AOP默认的动态代理
分析: 当引入AOP相关依赖后 <dependency> <groupId>org.springframework</groupId> <artifactId ...
- NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)
参考链接: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/advanced/gradient_clip_cn.html 1. ...
- Visual Basic 6的安装与辅助插件 - 初学者系列 - 学习者系列文章
好久没玩VB6了,今天无聊,就把原来的VB6相关的代码翻了出来,然后上了VMWare虚拟机,把VB6安装上,然后把架构设计那个模板找出来完善了一下.看了一下,VB6这块需要记录一些内容,于是有了本文. ...
- 教你用JavaScript实现粘性导航
案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个粘性导航.移动页面导航仍在页面上方.通过实战我们将学会scrollY属性.offse ...
- HTTP 400 Bad Request 错误。
- mysql5.7 大量sleep连接解决方法
show processlist 查看发现有大量sleep进程 查看当前数据库设置的最大连接数 show variables like 'max_connections'; 如果是生产环境需要紧急处理 ...
- DP的各种优化小结
动态规划算法(简称动规,DP),是IO中最为常见的,也是最为重要的算法之一.这也就意味着,在各种题目与比赛中它会有很多稀奇古怪的算法和优化,时不时地在你的面前出现一个TLE,MLE和RE来搞你的心态. ...
- Laravel入坑指南(10)——事件Event
不知不觉,我们已经来到了第10小节.这一小节,我们一起讨论关于"事件"这个话题.众所周知,从二进制到汇编,再到高等级语言,这一路发展下来,代码都是顺序执行的,那么事件是什么?这个事 ...
- Laravel入坑指南(3)——模板
各位小伙伴有缘聚到这里,说明对于Laravel的路由和控制器已经有点了解了. 会写业务逻辑之后,如何把结果漂亮地展示出来,就是我们要解决的问题.(前后端分离的同学,请自动忽略)在MVC的世界里,漂亮的 ...
- Springboot+Vue+ElementUI实现的宿舍管理系统
项目说明 doman是一个基于Springboot+Vue实现的前后端分离的宿舍管理系统.项目为本人亲手打造,需要的朋友可以拿去做个修改也是不错的.大神请忽略:) 项目功能 详细请看功能演示: Spr ...