接口响应成功未有预期结果排查

news2024/9/26 5:23:18

最近开发中遇到一个问题,有一个新增接口,请求该接口时响应200但查询相关数据未有预期的数据,且日志中没有任何报错或警告;一般来说响应200认为是成功,但是结果却不符合事实;此时无外乎几种情况:
1、异常日志查找错误
2、代码存在逻辑问题
3、代码中的异常被吃掉了
4、某些api在某些情况不会出现异常会直接跳过逻辑

针对情况具体分析解决:
第一种情况要看出现问题的请求是否记录在当前的日志文件中,比如一天的日志文件拆分了多个、拆分了info、warn、error等日志文件;分布式系统里面可能这个错误不是当前模块提示的等等,所以先确定这个错误如果有记录是在哪个日志文件中。

第二种情况只能通过检验代码逻辑、日志、debug等方式排查代码逻辑问题,很多时候是某些特殊的数据情况没有兼容对应逻辑导致的,当然还有部分是在高并发、集群等情况下才会出现问题,这种需要对相关逻辑做高并发集群的特殊处理。

第三种情况可能是代码中避免某些报错,所以进行了捕获,但在捕获之后没有做出相关处理直接忽略了错误信息,这导致请求成功实际上有错误但错误未被记录下来,那么这种情况可以将catch里面进行日志打印或debug排查。

第四种情况因为不同的组件由不同的厂商提供,这些厂商在设计api时出发点不同,有些认为数据为空不合法直接抛出异常,有些认为数据为空是合法的,但不做任何处理,直接跳过处理逻辑;所以这种情况同样可以通过日志、debug等方式结合数据及使用的api对相应数据的处理逻辑进行分析,着重观察使用三方api的部分;这个情况和第二种情况可以归为一类,既然三方组件这种处理方式,那么我们只能调整我们自己的代码逻辑来兼容这种情况。

我这里遇到的情况属于第二种情况,因为特殊的数据,导致查询出来的关联数据为空,后续for循环处理关联数据的逻辑不执行,最终需要insert的数据为空不插入数据,所以最终结果是成功,也没有错误日志但没有预期数据;最终通过修改逻辑避免关联数据为空的情况,避免不新增数据。

测试for循环:

package com.database.pool.testpool.test;

import java.util.ArrayList;
import java.util.List;

/**
 * 循环测试
 */
public class TestFor {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        fori(list);
        forIn(list);
        forEach(list);
    }

    /**
     * 传统for循环
     * @param list
     */
    public static void fori(List<Integer> list){
        for (int i = 0; i < list.size(); i++) {
            System.out.println("传统for当前数据:"+list.get(i));
        }
    }

    /**
     * for in方式循环
     * @param list
     */
    public static void forIn(List<Integer> list){
        for (Integer integer : list) {
            System.out.println("for in当前数据:"+integer);
        }
    }

    /**
     * forEach方式循环
     * @param list
     */
    public static void forEach(List<Integer> list){
        list.forEach(integer -> System.out.println("forEach当前数据:"+integer));
    }


}

参数不是null且有元素的情况—都能正常执行循环里面的逻辑:
在这里插入图片描述
参数不是null但没有元素的情况—都能正常执行不报错:
在这里插入图片描述
参数是null的情况—都会报错:
在这里插入图片描述
通过针对for循环测试,入参只要不为null,都不会报错,如果入参没有元素则循环中的逻辑不会执行。
因此如果代码中有for循环处理逻辑,却没有预期数据也没有报错此时应当想到for循环的参数为空(不是null),从而排查这个入参为什么会为空,为空是否正常,进行相关处理。

题外:
1、如果代码中某些日志未打印,在排查了日志不生效,日志文件未找错的情况下,毫无疑问肯定是这块日志打印未执行;此时可能会因为以前都是正常执行的原因从而直接忽略某些内容,导致很难定位原因;此时正确的做法应当是从头分析这个日志打印什么情况下会执行,什么情况下不执行,甚至需要结合具体的入参进行分析;很可能的原因就是修改了代码逻辑或修改了某些配置导致的不执行(这个配置的来源可能是配置文件、可能是数据库中的字典配置等信息)。
2、可能系统的日志统一处理记录不完善,导致记录了报错,但报错日志信息比较简略(比如只记录了异常的message信息),这时虽然知道有问题,但要定位具体原因还是很难;此时要么将统一日志处理记录得非常详细,要么就在报错的逻辑部分记录非常详细的日志来排查问题;具体做法可以 将错误的代码try/catch,然后在catch中捕获比较顶级的异常(如:Exception e),并作 log.error(“错误信息:”,e) 处理,此时日志系统会将完整的错误记录在日志中,而非简单的message信息记录,可以方便排查问题(主要还是日志处理不完善导致的,建议还是将日志处理做完善)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/985309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DQN算法概述及基于Pytorch的DQN迷宫实战代码

一. DQN算法概述 1.1 算法定义 Q-Learing是在一个表格中存储动作对应的奖励值&#xff0c;即状态-价值函数Q(s,a)&#xff0c;这种算法存在很大的局限性。在现实中很多情况下&#xff0c;强化学习任务所面临的状态空间是连续的&#xff0c;存在无穷多个状态&#xff0c;这种情…

D361周赛复盘:模拟分割整数⭐+变为整除的最小次数⭐

文章目录 2843.统计对称整数的数目&#xff08;模拟&#xff0c;分割整数为两部分&#xff09;思路1.整数换成字符串版本2.直接用整数的版本 2844.生成特殊数字的最小操作(模拟&#xff0c;x能被Num整除的条件)思路完整版 2843.统计对称整数的数目&#xff08;模拟&#xff0c;…

4.矩阵的几何意义、变基与迹

文章目录 变基操作与矩阵矩阵的迹几何意义矩阵迹的几条性质 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 变基操作与矩阵 我们知道空间中一点的坐标可以表示以原点为起点以该点为终点的向量。 以二维平面为例&#xff0c;如下图 选取…

D1. Too Many Segments (easy version)

题目&#xff1a;样例1&#xff1a; 输入 7 2 11 11 9 11 7 8 8 9 7 8 9 11 7 9输出 3 1 4 7 样例2&#xff1a; 输入 5 1 29 30 30 30 29 29 28 30 30 30输出 3 1 2 4 样例3&#xff1a; 输入 6 1 2 3 3 3 2 3 2 2 2 3 2 3输出 4 1 3 5 6 思路&#xff1a; 这里数据范围是…

React 全栈体系(四)

第二章 React面向组件编程 六、组件的生命周期 1. 效果 需求:定义组件实现以下功能&#xff1a; 让指定的文本做显示 / 隐藏的渐变动画从完全可见&#xff0c;到彻底消失&#xff0c;耗时2S点击“不活了”按钮从界面中卸载组件 <!DOCTYPE html> <html lang"e…

AlexNet 06

一、发展 1989年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet。 1998年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet-5 AlexNet&#xff0c;VGG&#xff0c;GoogleNet&#xff0c;R…

863. 二叉树中所有距离为 K 的结点

863. 二叉树中所有距离为 K 的结点 C代码&#xff1a;dfs /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/typedef struct {int key;struct TreeNode* node;UT_hash_handle hh; } HashTable;HashTable* head; int* ans…

半导体厂务液体泄漏问题的挑战与解决方案

在半导体制造领域&#xff0c;液体泄漏是一项极具挑战性的问题。半导体工厂内有着大量的化学品、工艺液体和废水系统&#xff0c;这些液体在制造过程中扮演着至关重要的角色。然而&#xff0c;液体泄漏可能会导致严重的生产中断、环境污染和安全风险。本文将探讨半导体厂务中的…

Java 多线程系列Ⅴ(常见锁策略+CAS+synchronized原理)

常见锁策略 一、乐观锁 & 悲观锁二、重量级锁 & 轻量级锁三、自旋锁 & 挂起等待锁四、互斥锁 & 读写锁五、可重入锁 & 不可重入锁六、公平锁 & 非公平锁七、CAS1、CAS特点2、CAS的应用3、CAS 实现自旋锁4、CAS的ABA问题 八、synchronized 原理1、synch…

讯飞开放平台--星火认知大模型--开发技术文档--js实例代码详解

阿丹&#xff1a; 之前调用写过调用百度的文心一言写网站&#xff0c;讯飞的星火认知模型开放了&#xff0c;这次尝试一下使用流式来进行用户的交互。 官网&#xff1a; 平台简介 | 讯飞开放平台文档中心 星火认知大模型Web文档 | 讯飞开放平台文档中心 简介&#xff1a; 本…

恒驰QA | 我们到底是做什么的?和恒大恒驰有什么关系?

5个关键问题解答&#xff0c;带您走进恒驰信息 Q&#xff1a;恒驰信息和恒大恒驰是什么关系&#xff1f; A&#xff1a;答案是没有关系。 这是我们被问到比较频繁的问题&#xff0c;只能说纯属同名啦&#xff01;恒驰信息成立于2005年&#xff0c;比恒大恒驰创立早上14年之久。…

【视觉SLAM入门】7.2. 从卡尔曼滤波到扩展卡尔曼滤波,引入、代码、原理、实战,C++实现以及全部源码

"觇其平生&#xff0c;岂能容物&#xff1f;" 0. 简单认识1. 公式对比解读2. 应用举例3. 解决方案(公式---代码对应)3.1 初始化3.2 EKF3.2.1 预测---状态方程3.2.2 系统协方差矩阵3.2.3 预测---系统协方差矩阵3.2.4 设置测量矩阵3.2.5 更新---状态变量&#xff0c;卡…

搞懂三极管

三极管的电流放大作用应该算是模拟电路里面的一个难点内容&#xff0c;我想用这几个动画简单的解释下为什么小电流Ib能控制大电流Ic的大小&#xff0c;以及放大电路的原理。 我这里的三极管也叫双极型晶体管,模电的放大电路和数电的简单逻辑电路里面都会用到。有集电极c、基极b…

docker-compose 升级

此方法针对Linux版本生效&#xff0c;请测试有效&#xff1b;记录以方面日后能使用到&#xff1b; ## 安装docker 使用常用命名安装即可, 以下命令安装若提示找不到安装包&#xff0c;直接update 即可。 yum install docker OR apt install docker OR apt install do…

2023 年全国大学生数学建模B题目-多波束测线问题

B题目感觉属于平面几何和立体几何的问题&#xff0c;本质上需要推导几何变换情况&#xff0c;B题目属于有标准答案型&#xff0c;没太大的把握不建议选择&#xff0c;可发挥型不大。 第一问 比较简单&#xff0c;就一个2维平面的问题&#xff0c;但有点没理解&#xff0c;这个…

【2023最新版】腾讯云CODING平台使用教程(Pycharm/命令:本地项目推送到CODING)

目录 一、CODING简介 网址 二、CODING使用 1. 创建项目 2. 创建代码仓库 三、PyCharm&#xff1a;本地项目推送到CODING 1. 管理远程 2. 提交 3. 推送 4. 结果 四、使用命令推送 1. 打开终端 2. 初始化 Git 仓库 3. 添加远程仓库 4. 添加文件到暂存区 5. 提交更…

【代码随想录】Day 48 动态规划9 (打家劫舍Ⅰ Ⅱ Ⅲ)

打家劫舍 https://leetcode.cn/problems/house-robber/ 注意要是i-1没偷&#xff0c;那么dp[i] dp[i-2] nums[i]&#xff0c;而不是dp[i-1]&#xff1a; class Solution { public:int rob(vector<int>& nums) {if (nums.size() 0) return 0;if (nums.size() 1…

【图文并茂】C++介绍之串

1.1串 引子—— ​ 字符串简称为串&#xff0c;串是由字符元素构成的&#xff0c;其中元素的逻辑关系也是一种线性关系。串的处理在计算机非数值处理中占用重要的地位&#xff0c;如信息检索系统&#xff0c;文字编辑等都是以串数据作为处理对象 串是由零个或多个字符组成的…

OSCP系列靶场-Esay-Sumo

OSCP系列靶场-Esay-Sumo 总结 getwebshell : nikto扫描 → 发现shellshock漏洞 → 漏洞利用 → getwebshell 提 权 思 路 : 内网信息收集 → 内核版本较老 →脏牛提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.194 启动靶机 获取目标机器IP → 192.168.190.87 信息收…

【LeetCode75】第四十九题 数组中的第K个最大元素

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目很简单&#xff0c;就是给我们一个数组&#xff0c;让我们返回第K大的元素。 那么很直观的一个做法就是我们直接对数组进行降序排序…