博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo 日志ID链条
阅读量:4134 次
发布时间:2019-05-25

本文共 3540 字,大约阅读时间需要 11 分钟。

@Activatepublic class NoticeFilterDubbo implements Filter {    public static final Logger logger = LoggerFactory.getLogger(NoticeFilterDubbo.class);    public static final ObjectMapper objectMapper = new ObjectMapper();    public NoticeFilterDubbo() {    }    public Result invoke(Invoker
invoker, Invocation invocation) throws RpcException { String interfaceName = invoker.getUrl().getParameter("interface"); String methodName = invocation.getMethodName(); String appName = FrameProperty.get("appname"); String aid = invocation.getAttachment("_DUBBO_AGENT_ID"); String tid = invocation.getAttachment("_DUBBO_TRASACTION_ID"); String sid = invocation.getAttachment("_DUBBO_SPAN_ID"); String ssid = invocation.getAttachment("_DUBBO_STACK_START_ID"); String tidStr = null; String traceId = ""; String rpcId = ""; if (aid != null && tid != null && sid != null && ssid != null) { tidStr = aid.toString() + "," + tid.toString() + "," + ssid.toString() + "," + sid.toString(); CommonUtil.getTraceId(tidStr); traceId = tid.toString(); rpcId = sid.toString(); } else { traceId = CommonUtil.getTraceId(2); } String url = interfaceName + "." + methodName; ThreadLocalContainer.setURI(url); String logId = ThreadLocalContainer.getUinqueLogId(); MDC.put("traceUrl", "traceUrl[" + CommonUtil.getTraceUrl(tidStr) + "]"); MDC.put("traceid", "traceid[" + traceId + "]"); MDC.put("rpcid", "rpcid[" + rpcId + "]"); MDC.put("logid", "logid[" + logId + "]"); MDC.put("url", "url[" + url + "]"); TimeUtil.start(SourceTagEnum.TOTAL, ""); RpcResult result = (RpcResult)invoker.invoke(invocation); TimeUtil.end(SourceTagEnum.TOTAL, ""); if (!result.hasException()) { RequestContext.getLoginfo().put("resCode", "0"); RequestContext.getLoginfo().put("resMsg", "success"); } else { Throwable e = result.getException(); MyLogs.warn("catch in as-log.NoticeFilterDubbo", e); RequestContext.getLoginfo().put("resCode", "1"); } boolean isNoPointParam = Constants.noPointParamLogMethodMap.containsKey(methodName); boolean isUsingNoPointParamLog = Constants.isUsingNoPointParamLog; if (!isUsingNoPointParamLog || !isNoPointParam) { this.printRequest(invocation); } logger.notice("", appName, "", "", RequestContext.getLoginfo()); return result; } private void printRequest(Invocation invocation) { Object[] objs = invocation.getArguments(); try { if (objs != null) { if (objs.length > 1) { ThreadLocalContainer.setRequestString(bean2Json(objs)); } else if (objs.length == 1) { ThreadLocalContainer.setRequestString(bean2Json(objs[0])); } } } catch (Exception var4) { ; } } public static String bean2Json(Object obj) { try { return obj == null ? "" : objectMapper.writeValueAsString(obj); } catch (Exception var2) { logger.warn("bean2Json error", var2); return ""; } }}

重点为 MDC和ThreadLocal。

在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter,内容如下:

      notice=com.liwen.as.log.filter.NoticeFilterDubbo

<dubbo:provider  filter="exceptionFilter" threadpool="fixed" threads="500" dispatcher="message" />

转载地址:http://jhsvi.baihongyu.com/

你可能感兴趣的文章
web.py 0.3 新手指南 - 如何用Gmail发送邮件
查看>>
web.py 0.3 新手指南 - RESTful doctesting using app.request
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>