自定义日志_Dubbo自定义日志拦截器源码分析
需求场景
在使用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自定义日志拦截器源码分析相关推荐
- SpringMVC拦截器源码解析
版权声明:本文为CSDN博主「风剑无影」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/dreamcatche ...
- 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
- THOR:MindSpore 自研高阶优化器源码分析和实践应用
摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...
- 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
https://www.cnblogs.com/harlanc/p/9693983.html 目录 OpenSL ES & AudioTrack 源码分析 创建播放器音频输出对象 配置并创建音 ...
- 解密android日志xlog,XLog 详解及源码分析
一.前言 这里的 XLog 不是微信 Mars 里面的 xLog,而是elvishew的xLog.感兴趣的同学可以看看作者 elvishwe 的官文史上最强的 Android 日志库 XLog.这里先 ...
- wireshark协议解析器 源码分析 封装调用
源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...
- Android端视频播放器源码分析
这篇文章主要是分析视频播放器的实现代码.代码地址:查看 整体设计框架 我们播放本地的视频文件需要封装出一个输入模块: 输入模块要开启一个线程来处理解封装和解码,把得到的裸数据放到音频和视频的队列中. ...
- 图解VC++版PE文件解析器源码分析
该源码下载自 http://download.csdn.net/download/witch_soya/4979587 1 Understand 分析的图表 2 PE结构解析的主要代码简要分析 首先看 ...
- mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...
背景 一个最简单的select语句包含select子句.from子句.where子句等,这些子句都不包含子查询(subselect),也没有union操作.而复杂的select语句包含select子句 ...
最新文章
- 迷途指针,从百度百科上摘抄的,语言很幽默
- jvm六:主动使用(1.new一个对象, 2.反射)
- itunes app 下载链接的几种表现形式
- [WPF疑难] 继承自定义窗口
- AC自动机-HDU2222-模板题
- MySQL数据库的权限管理
- 老司机带你在MySQL领域“大吉大利,晚上吃鸡”
- python 导入包 导入模块
- VisualBox 克隆CentOS 7.6 后,ip,源,禁止root远程登录,主机,防火墙,ssh密钥登录
- 把统计代码改成“量子统计”了
- CV520直接pin对pin替换 MS520,直接替换,无需修改硬件以及软件
- 安装office2007 1706错误
- 为何中华武术不堪一击?武学大师临终前解密搏击格斗的残酷真相
- 中国已消失的 9 所世界级大学
- 架构师之路-秒杀系统优化思路
- 【科创人】DCloud崔红保:uni-app和HBuilder背后的男人,让天下没有难做的开发
- 解读第一个C++程序
- Android图片加载优化方案
- LeetCode——剑指 Offer 38. 字符串的排列
- 方形图片使用QLabel显示成圆形
热门文章
- win7下搭建opengl es 2.0开发环境
- 深入分析String类型(一)
- Spring @Async 注解
- Spring Cloud限流详解(内含源码)
- openwrt拦截snmp报文
- 开发工程师的维护意识存在不?
- U盘怎么拔?该设备正在使用中,请关闭可能使用该设备的所有程序或窗口
- 中油C语言第一次在线作业,中石油华东《程序设计(C语言)》2020年春季学期在线作业(二)...
- python sklearn安装_安装 scikit-learn
- c4d启动无反应_修车多年,第一次遇到反复烧启动机的怪事...