一、业务场景

  最近在开发新功能,新功能主要就是写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新项目的更多相关文章

  1. 学web前端开发写给新手的建议,超实用!

    01 前面的话 如今我们使用的互联网,客户端与服务器端的交互无时无刻不在发生.比如我们在浏览器打开网页,浏览器就是客户端,将网页数据发过来的也就是服务器.其实服务器,并没有什么特别的,也就是一台昼夜不 ...

  2. 项目开发中Maven的单向依赖-2022新项目

    一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...

  3. Java异步记录日志-2022新项目

    一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...

  4. redis缓存恢复-2022新项目

    一.业务场景 Web项目开发中,为了加快数据处理的的效率,大量的使用了各种缓存,缓存技术主要使用的是redis.导致出现的小小的 问题是对redis缓存形成了一个比较强的依赖,并且有的数据暂时是没有同 ...

  5. mybatis-拦截器实际应用-替换表名-2022新项目

    一.业务场景 考虑到新项目中部分与业务数据相关的表在后期数据量会比较大,架构师在最开始设计项目中与业务数据相关的表时,就已经考虑使用分表来 进行处理,给业务数据相关的每张表都添加统一批次的后缀,查询这 ...

  6. Light项目---实现后端接口时遇见的一些问题

    ImproperlyConfigured: WSGI application 'lightapi.wsgi.application' could not be loaded; 在moddleware中 ...

  7. 在php中写接口时 对json格式的转换 简单的方法

    方法 一 方法二 可以通过urlencode();遍历出来

  8. .NET项目开发—浅谈面向接口编程、可测试性、单元测试、迭代重构(项目小结)

    阅读目录: 1.开篇介绍 2.迭代测试.重构(强制性面向接口编程,要求代码具有可测试性) 2.1.面向接口编程的两个设计误区 2.1.1.接口的依赖倒置 2.1.2.接口对实体的抽象 2.2.迭代单元 ...

  9. git实战-多分支开发-2022新项目

    现在开发中大多数公司中都在使用Git这个代码版本管理工具,几乎可以说是已经成为标配,刚入职不久的这家新公司也不例外. 去公司没多久,开始搭建项目,然后创建开发分支,有多少个后端人员就创建多少个开发分支 ...

  10. postgresql使用group by进行数据去重-2022新项目

    一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...

随机推荐

  1. 【SpringBoot】AOP默认的动态代理

    分析: 当引入AOP相关依赖后 <dependency> <groupId>org.springframework</groupId> <artifactId ...

  2. NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)

    参考链接: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/advanced/gradient_clip_cn.html 1. ...

  3. Visual Basic 6的安装与辅助插件 - 初学者系列 - 学习者系列文章

    好久没玩VB6了,今天无聊,就把原来的VB6相关的代码翻了出来,然后上了VMWare虚拟机,把VB6安装上,然后把架构设计那个模板找出来完善了一下.看了一下,VB6这块需要记录一些内容,于是有了本文. ...

  4. 教你用JavaScript实现粘性导航

    案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个粘性导航.移动页面导航仍在页面上方.通过实战我们将学会scrollY属性.offse ...

  5. HTTP 400 Bad Request 错误。

  6. mysql5.7 大量sleep连接解决方法

    show processlist 查看发现有大量sleep进程 查看当前数据库设置的最大连接数 show variables like 'max_connections'; 如果是生产环境需要紧急处理 ...

  7. DP的各种优化小结

    动态规划算法(简称动规,DP),是IO中最为常见的,也是最为重要的算法之一.这也就意味着,在各种题目与比赛中它会有很多稀奇古怪的算法和优化,时不时地在你的面前出现一个TLE,MLE和RE来搞你的心态. ...

  8. Laravel入坑指南(10)——事件Event

    不知不觉,我们已经来到了第10小节.这一小节,我们一起讨论关于"事件"这个话题.众所周知,从二进制到汇编,再到高等级语言,这一路发展下来,代码都是顺序执行的,那么事件是什么?这个事 ...

  9. Laravel入坑指南(3)——模板

    各位小伙伴有缘聚到这里,说明对于Laravel的路由和控制器已经有点了解了. 会写业务逻辑之后,如何把结果漂亮地展示出来,就是我们要解决的问题.(前后端分离的同学,请自动忽略)在MVC的世界里,漂亮的 ...

  10. Springboot+Vue+ElementUI实现的宿舍管理系统

    项目说明 doman是一个基于Springboot+Vue实现的前后端分离的宿舍管理系统.项目为本人亲手打造,需要的朋友可以拿去做个修改也是不错的.大神请忽略:) 项目功能 详细请看功能演示: Spr ...