需求场景

在使用Dubbo搭建的分布式项目中,服务层代码调用是这样的:

 @GetMapping(value = "/info")2 public BaseResult userInfo() {3 //rpc远程调用用户服务4 BaseResult result = mUserService.userInfo();6 return result;7 }

这里的用户服务位于另外一个服务进程,由服务提供者暴露出来,让web层远程调用,需要记录服务结果的调用过程,便于跟踪定位bug.

自定义日志拦截器

翻看下Dubbo官方文档,可以看到如下内容:

简要说明:

  • Dubbo 中所有的拦截器全部继承自org.apache.dubbo.rpc.Filter接口,我们自己也可以自行扩展,只要继承该接口即可.
  • 用户自定义 filter 默认在内置 filter 之后执行

新增 DubboServiceFilter 拦截器如下:

public class DubboServiceFilter implements Filter { private static final Logger LOGGER = LoggerFactory.getLogger(DubboServiceFilter.class); @Override public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException { //外部日志开关默认关闭 String logSwitch = StringUtils.equals(RedisUtil.get(BaseConstants.CACHE_SERVICE_LOG_SWITCH), BaseConstants.YES) ? BaseConstants.YES : BaseConstants.NO; if (StringUtils.equals(BaseConstants.YES, logSwitch)) { //打印入参日志 DubboServiceRequest serviceRequest = new DubboServiceRequest(); serviceRequest.setInterfaceName(invocation.getInvoker().getInterface().getName()); serviceRequest.setMethodName(invocation.getMethodName()); serviceRequest.setArgs(invocation.getArguments()); LOGGER.info("dubbo服务接口入参: " + JSON.toJSONString(serviceRequest)); } //开始时间 long startTime = System.currentTimeMillis(); //执行接口调用逻辑 Result result = invoker.invoke(invocation); //调用耗时 long elapsed = System.currentTimeMillis() - startTime; //如果发生异常 则打印异常日志 if (result.hasException() && invoker.getInterface() != GenericService.class) { LOGGER.error("dubbo执行异常: 

自定义日志_Dubbo自定义日志拦截器源码分析相关推荐

  1. SpringMVC拦截器源码解析

    版权声明:本文为CSDN博主「风剑无影」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/dreamcatche ...

  2. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  3. THOR:MindSpore 自研高阶优化器源码分析和实践应用

    摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...

  4. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇

    https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...

  5. 解密android日志xlog,XLog 详解及源码分析

    一.前言 这里的 XLog 不是微信 Mars 里面的 xLog,而是elvishew的xLog.感兴趣的同学可以看看作者 elvishwe 的官文史上最强的 Android 日志库 XLog.这里先 ...

  6. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  7. Android端视频播放器源码分析

    这篇文章主要是分析视频播放器的实现代码.代码地址:查看 整体设计框架 我们播放本地的视频文件需要封装出一个输入模块: 输入模块要开启一个线程来处理解封装和解码,把得到的裸数据放到音频和视频的队列中. ...

  8. 图解VC++版PE文件解析器源码分析

    该源码下载自 http://download.csdn.net/download/witch_soya/4979587 1 Understand 分析的图表 2 PE结构解析的主要代码简要分析 首先看 ...

  9. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...

    背景 一个最简单的select语句包含select子句.from子句.where子句等,这些子句都不包含子查询(subselect),也没有union操作.而复杂的select语句包含select子句 ...

最新文章

  1. 迷途指针,从百度百科上摘抄的,语言很幽默
  2. jvm六:主动使用(1.new一个对象, 2.反射)
  3. itunes app 下载链接的几种表现形式
  4. [WPF疑难] 继承自定义窗口
  5. AC自动机-HDU2222-模板题
  6. MySQL数据库的权限管理
  7. 老司机带你在MySQL领域“大吉大利,晚上吃鸡”
  8. python 导入包 导入模块
  9. VisualBox 克隆CentOS 7.6 后,ip,源,禁止root远程登录,主机,防火墙,ssh密钥登录
  10. 把统计代码改成“量子统计”了
  11. CV520直接pin对pin替换 MS520,直接替换,无需修改硬件以及软件
  12. 安装office2007 1706错误
  13. 为何中华武术不堪一击?武学大师临终前解密搏击格斗的残酷真相
  14. 中国已消失的 9 所世界级大学
  15. 架构师之路-秒杀系统优化思路
  16. 【科创人】DCloud崔红保:uni-app和HBuilder背后的男人,让天下没有难做的开发
  17. 解读第一个C++程序
  18. Android图片加载优化方案
  19. LeetCode——剑指 Offer 38. 字符串的排列
  20. 方形图片使用QLabel显示成圆形

热门文章

  1. win7下搭建opengl es 2.0开发环境
  2. 深入分析String类型(一)
  3. Spring @Async 注解
  4. Spring Cloud限流详解(内含源码)
  5. openwrt拦截snmp报文
  6. 开发工程师的维护意识存在不?
  7. U盘怎么拔?该设备正在使用中,请关闭可能使用该设备的所有程序或窗口
  8. 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
  9. python sklearn安装_安装 scikit-learn
  10. c4d启动无反应_修车多年,第一次遇到反复烧启动机的怪事...