记录一次因为没打日志而出现的很难解的bug,总结:RPC调用第三方接口的时候,一定要把日志打印出来,避免使用System.err.println

本文讲述了在metadata项目中遇到的循环登录问题及解决过程。通过详细调试发现,问题根源在于RPC调用第三方接口时未正确配置域名,导致未能获取到用户信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先说下项目背景:
leap-id做登录认证的SSO(其他团队做的),metadata元数据系统(这也是我在做开发的项目)
在metadata登录leap-id,获取lpt认证,传到loginCallback方法,存到cookies里,跳转到首页,这样就登录成功。

遇到问题:
我在本地改好bug,发布到linux测试环境(在本地win环境调试是没有问题的),始终出现首页循环登录的问题,然而找不到任何日志,(这是发生在leap-id之后,他们把以前的ip换成了域名),chrome调试发现所有发出的请求也都是正常的,我很认真的比对正常登录的所有请求和出现循环登录问题的所有请求,发现是在执行loginCallback执行之后又调到登录页面去登录了,可以我明明已经登录了啊,后面打印出日志发现是没有得到登录的userinfo。loginCallback的逻辑是登录成功后就跳转到首页,失败就到登录页面。继续调试发现是问题的是这几行代码:

try {
                byte[] e = LeapidUtils.doGetHttpRequest(url);
                if(e.length > 0) {
                    bis = new ObjectInputStream(new ByteArrayInputStream(e));
                    IdInfo idInfo = (IdInfo)bis.readObject();
                    if(idInfo != null) {
                        request.setAttribute("sso_idinfo", idInfo);
                    }
                }
            } catch (Exception var15) {
                System.err.println("access url exception:" + url + ", leapidToken=" + leapidToken);
                var15.printStackTrace(System.err);
            } finally {
                CloseableUtils.close(new Closeable[]{bis});
            }

这里doGetHttpRequest是RPC调用登录成功后在leap-id系统取得用户的信息。但是leap-id那边升级域名之后,我在win配置了host,当时确实不知道内部会有这样的调用,以为不需要再linux配置host,就在这里因为没配置host的问题,我花了一整天,和写这个项目的哥们儿一起研究,最后才找到问题。
最重要的是这句:

System.err.println("access url exception:" + url + ", leapidToken=" + leapidToken);

我们项目使用log4j打印日志,他用System.err.println去打印这个异常,所以这个日志是不会被打印出来,如果是用log.info来打印的话,有这个日志信息,就回很快发现这个问题了。我们在面对这种很诡异的问题的时候,没有任何日志信息,只能一点一点排除,最开始以为是那边升级出了问题,或是linux String和win的长度不一样,,,我做了很多假设,花了不少时间去一点一点排除,如果能打印出了日志,问题会很快得到解决。
最后总结:RPC调用第三方接口的时候,一定要把日志打印出来。在任何时候请不要用System.err.println这样的语句来打印,这样会让你在fix测试,或者是线上bug变得异常艰难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值