您好!欢迎来到源码码网!

无异常日志,就不能排查问题了?

  • 源码教程
  • 时间:2020-06-09 15:28
  • 阅读:921

众所周知,日志是排查问题的重要手段。关于日志设计,以及怎么根据从【用户报障】环节开始到秒级定位问题这个我们下一期说(绝非套路),这一期,主要讲一下,在没有异常日志的情况下,如何定位问题。没有日志当真能排查问题,不会是标题党吧!

案例一

从最大的同性交友网站中拉取【dubbo-spring-boot-project】的代码。

image.png

然后把demo跑起来。

本场景是由真实案例改编,因为公司代码比较复杂也不方便透露,而这个demo在github上大家都能找到,既保证了原汁原味,又能让大家方便自己体验排查过程。

好了,我们先设置owner = "feichao",然后看一下控制台

image.png

image.png

一切正常

那么,当我设置成owner = "feichaozhenshuai!",再启动

image.png

看似一切都正常,那么,我们到控制台一看。

image.png

什么情况,怎么就没owner了?

这是在哪个环节出问题了?其实肥朝当初在公司遇到这个问题的时候,场景比这个复杂得多。因为公司的业务里没有owner的话,在运行时会出现一些其他异常,涉及公司业务这里就不展开了,我们言归正传,为毛我设置成feichaozhenshuai!就不行了,那我设置成肥朝大帅比电脑会不会爆炸啊???


常见的错误做法是,把这个问题截图往群里一丢,问“你们有没有遇到过dubbo里面,owner设置不生效的问题?”

那么有人会这么问,“dubbo里面设置owner却不生效,你们觉得我要从个角度排查问题?”。一看到这么正确的提问方式,我觉得我不回复你都不好意思。好了,回到主题,这个时候,没有一点点错误日志,但是却设置不成功,我们有哪些排查手段?

套路一

直接找set方法,看看是不是代码做了判断,防止在owner字段里面set类似肥朝真帅这种词语,避免把帅这件事走漏风声!。这么一分析似乎挺有道理对吧,那么,如何快速找到这个set方法呢?如图

image.png

public void setOwner(String owner) {
    checkMultiName("owner", owner);
    this.owner = owner;
}

我们跟进checkMultiName代码后发现

protected static void checkProperty(String property, String value, int maxlength, Pattern pattern) {
    if (StringUtils.isEmpty(value)) {
        return;
    }
    if (value.length() > maxlength) {
        throw new IllegalStateException("Invalid " + property + "="" + value + "" is longer than " + maxlength);
    }
    if (pattern != null) {
        Matcher matcher = pattern.matcher(value);
        if (!matcher.matches()) {
            throw new IllegalStateException("Invalid " + property + "="" + value + "" contains illegal " +
                    "character, only digit, letter, '-', '_' or '.' is legal.");
        }
    }
}

从异常描述就很明显可以看出,原来owner里面是只支持-和_等这类特殊符号,!是不支持的,所以设置成不成功,和肥朝帅不帅是没关系的,和后面的!是有关系的。

套路二

我们知道idea里面有很多好用的功能,比如肥朝之前的【看源码,我为什么推荐IDEA?】中就提到了条件断点,除此之外,还有一个被大家低估的功能,叫做异常断点。

image.png

里面的单词都是小学的英语单词,因此怎么使用就不做过多解释。遇到这个问题时,我们可以这样设置异常断点。

image.png

运行起来如下:

image.png

这样,运行起来的时候,就会迅速定位到异常位置。然后一顿分析,应该很容易找出问题。

是不是有点感觉了?那我们再来一个题型练习一下。


什么是编程思想?

肥朝始终觉得,要想比别人更优秀,除了比别人更努力这个必要因素外,思维方式,也是我们必要关注的一个重点。比如在案例二中,很多同学知道了bug之后,就认为自己学到东西了,其实这个想法既正确,也不正确。

正确的地方在于,你知道了这个bug,后面遇到相同的问题,你会猜一下是不是同样的原因。

不正确的地方在于,你只知道了这个bug出现的某个场景,但是当我们遇到这个问题,应对的排查套路有哪些你并不知道。也就是说,如果这个问题过后,你排查问题的套路并没有增加,亦或者你没有能从这个问题上,发散出自己的想法,继续压榨出更多的价值,本质上,你的编程能力,其实并没有提升的。

然而,你一旦在公司时间长了,也就是我们常说的老油条,对公司的某些坑熟悉,新人遇到问题时,就容易猜对可能是某个坑。但是其实你的套路来来去去就那几个,本质上你的编程能力并没有提升,却让你产生了自己越来越牛逼,这下必须要加薪的错觉。

一个公司总是有线上报障是有问题的,但是一直不出问题也有问题的。当然很多时候,排查的机会或许轮不到你。这个时候,就会有常见的几种做法。

1.公司确实项目太简单,基本没有什么拿得出手的bug,都是一些低级的漏掉配置的bug。

2.大佬们在排查,反正不是我的问题,那我就看群吹吹水,下班美滋滋。

3.大佬们在排查,等他们有结论了,我就过去问一句是啥问题,然后暗自记下来,自己也涨点排查经验,Get到技巧,美滋滋。

4.大佬们在排查,得知原因后,深入思考,大佬们为啥会想到是这个原因,他们是怎么排查的?用了哪些排查工具?排查技巧?然后暗自总结一波,并把自己代入场景,脑补一下自己来排查问题,并把这个bug压榨出更多价值!(怎么压榨出更多价值,可以查看肥朝之前的源码实战文章,每一篇都有一个环节专门讲拓展思考的)

你的思维方式,你的行动,往往就决定你成为什么样的人。肥朝也始终相信,时间在哪,行动在哪,成就就在哪。一起共勉。

本文转自互联网,侵删

特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 陀螺匠OA办公系统源码 PHP + Vue 前后端分离 完整可商用
  • 项目介绍《陀螺匠》是一套采用Laravel9框架结合Swoole高性能框架与Vue.js前端技术栈构建的AI+低代码双引擎智能办公系统。陀螺匠深度融合了AI智能体以及低代码开发平台,系统简约,易于功能扩展,方便二次开发。旨在为企业提供一站式、数智化转型的全方位解决方案,助力企业高效运营与智能决策。源码说明源码说明:项目代码100%开源,基于AGPL-3.0,支持免费商用!技术栈:系统基于Laravel9+Swoole+Vue.
  • 软件教程
  • 来源:CRMEB
  • 编辑:CRMEB
  • 时间:2026-03-27 15:33
  • 阅读:654
  • open claw最近很火,如何理性看待?
  • open claw最近很火,如何理性看待?
  • openclaw是2026年初科技圈最火爆的现象级话题。它不仅仅是又一个AI产品,更被百川智能的王小川誉为与ChatGPT诞生同等重要的里程碑——标志着AI从”只会说”的对话者,进化到了”能够做”的行动者。对于这股全民”养虾”热潮,我的观察是:它代表了一次人机关系的革命性跃迁,但同时也是一场充满风险与泡沫的狂欢,其真正的价值需要在喧嚣褪去、安全与成本的挑战被克服后才能显现。下
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-17 11:06
  • 阅读:716
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序有什么区别
  • 原生小程序和封装的小程序是两种不同的开发模式,主要区别在于开发方式、性能表现、代码维护以及跨平台能力。为了让你更清晰地理解,我们可以把“原生”比作用钢筋水泥直接盖楼,而“封装”则是用预制板或套件来组装楼。以下是详细的对比分析:1.定义与本质原生小程序:定义: 直接使用微信官方提供的开发工具、语法和API进行开发。语言: 使用微信自己定义的一套技术栈(WXML(微信标记语言)做结构、WXSS(微信样式表)做样式、JS
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-03-06 11:54
  • 阅读:944
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • 基于NetCore(Razor Page)开发的Cms建站系统MIT协议
  • FytSoaCms一款基于NetCore2.2/3.1(RazorPage)功能强大的Cms建站系统,支持前后端分离。简介:模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。模型/栏目/分类信息体系:通过栏目和模型绑定,以及不同的模型类型,不同栏目可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。通过分类信息和栏目绑定,可以自动建立索引表,轻松实现复杂的信息检索。FytSoa是一套基于NetCore+SqlS
  • 开发工具
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 22:21
  • 阅读:799
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • 基于JAVA开发的企业级平台微信公众号管理系统SmartWx
  • SmartWx微信公众号管理系统是一个完整的微信公众号web操作版,直接编译即可运行。让用户不再用关心微信的底层接口,直接使用页面进行操作,简单方便。包括服务器绑定、文本管理、图文管理、菜单管理、粉丝管理、群发消息等。技术框架开发语言:JAVA数据库:MYSQLJAVA开发框架:SpringMVC+Spring+Mybatis缓存框架:j2cache前端开发框架:Layui+JQuery+html前台模板引擎:art-templat
  • 源码教程
  • 来源:gitee
  • 编辑:源码码网
  • 时间:2026-01-24 21:53
  • 阅读:833
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部