zoukankan      html  css  js  c++  java
  • 接口相关数据日志打印

    接口相关数据日志打印

      为什么要写这个呢,主要是随着项目的推动,数据量的提升,各种类型问题逐渐暴露出来,有时候在接口信息排查问题的日志数据不足或者凌乱,导致排查难度升高,所以一个比较完整可靠的接口日志是非常有必要的。

      还有这个日志的打印没有什么明确的规范,完全是根据自身项目的需求所变化成长,衍生扩展有用的数据。

      其实接口分析主要的几个点:请求地址、请求方式、远端地址、类名、方法、参数、返回值等。


     相关知识点概述

    1. 首先至少需要明白拦截器和过滤器的一些简单区别,调用的先后顺序。(可参考:https://www.cnblogs.com/panxuejun/p/7715917.html

      过滤器是基于函数回调、依赖Servlet容器、对所有请求有作用、初始化调用一次、无法跟Spring容器交集

      拦截器基于反射机制、只对action起作用,对啥静态文件请求不起作用、可以获取上下文、获取Spring容器Bean对象实现业务逻辑。

      根据使用场景选择性作用

    2. 若是了解Servlet和struts会更好的理解HttpServletRequest和HttpServletResponse,主要是需要了解HttpServletRequest相关使用(可参考:https://blog.csdn.net/wwq0813/article/details/90256058

        

    3. 需要掌握APO比较重要的几个使用方式,如:Pointcut、Advice、Aspect等。(可参考:https://blog.csdn.net/q982151756/article/details/80513340

       

    4. 还要了解几个注解的意思,如:RestController、ResponseBody、RequestMapping、PostMapping、PathVariable、RequestParam等(可参考:https://blog.csdn.net/youanyyou/article/details/100013330
    5. 需要知道不同的请求方式,参数接收方式不同,
      有可能的请求方式:
      • GET/POST的方式,一般情况下,GET在URL中读取,POST在Body 中读取,使用的注解为@RequestParam和@RequestBody
      • 也有在HttpServletRequest中获取参数,queryString,getParamter等

      还有一个知识点就是了解获取远程来源的IP,一般情况下都是会用request.getRemoteAddr(),但这个可能获取的只是代理的IP,并不是真实客户端的IP,一般比较主流的代理都会加上自己的头信息,如下:

    (可参考:https://blog.csdn.net/qq_33301866/article/details/108588521?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242

    X-Forwarded-For

    X-Forwarded-For 是一个 HTTP 扩展头部标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用。只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。

    X-Forwarded-For: client, proxy1, proxy2

    一般情况下,第一个ip为客户端真实ip,后面的为经过的代理服务器ip。

    Proxy-Client-IP

    这个一般是经过apache http服务器的请求才会有,用apache http做代理时一般会加上Proxy-Client-IP请求头,而WL- Proxy-Client-IP是他的

    WL- Proxy-Client-IP

    weblogic插件加上的请求头头

    HTTP_CLIENT_IP

    有些代理服务器会加上此请求头

    X-Real-IP

    nginx代理一般会加上此请求头


    接口相关数据

    接口请求数据打印:

    请求地址、请求方式、远端地址、类名、方法、参数

    接口返回数据打印:

    类、方法、返回值、耗时

    接口数据打印的原则:

      • 不能影响到业务逻辑
      • 对业务结果不能轻易改动
      • 输出有效分析数据,打印规范有效
      • 不能对服务性能产生影响
      • 有效、有价值数据可以规范JSON格式输出

    主要设计思路

    1、利用AOP环绕增强@RequestMapping注解,因为每个接口至少都会有这个吧,不管是隐性还是显性的。

    2、获取到当前线程的HttpServletRequest、请求参数、地址、IP信息、再组装好信息打印,注意疏漏的小细节点

    3、需要注意的是,若有参数HttpServletRequest存在,不能直接打印,会出错。

    4、打印返回数据。

    5、数据打印主要以JSON格式,以便后期调查就有价值数据分析。

    后期可扩展方向

    • 对有价值性数据把控可以进行存库或大数据分析
    • IP也可以利用防止恶意攻击和频繁请求
    • 也可以进行链路追踪

    GitHub相关代码地址:https://github.com/LiZhouYan/methodLogAdvice/blob/main/MethodLogAdvice.java

  • 相关阅读:
    MBProgressHUD 的类扩展方法用法
    ios中webview的高级用法(二)
    ios中webview的高级用法
    ios中UIWebview和asiHttprequest的用法
    ios中UIWebview中加载本地文件
    iOS中判断网络是否联网
    iPhone开发之在UINavigationBar上使用UISegmentedControl制作
    ios真机调试步骤
    uitableview分组的数据2中方式
    ios中开始页面做法
  • 原文地址:https://www.cnblogs.com/zhouguanglin/p/13969224.html
Copyright © 2011-2022 走看看