当前位置: 首页 > news >正文

建设部网站投诉如何注册今日中国新闻

建设部网站投诉如何注册,今日中国新闻,上海市奉贤区建设局网站,郑州网站建设维护公司skywalking的相关概念我就不介绍了,有兴趣可以参看官网文档 以下提供以下简单示例手工上报一些对问题排查比较有用的一些信息。当然这些内容你也可以写成探针插件的形式,怎么开发探针插件也自行参考官方文档。此处仅在项目框架层面提供一些简单的示例&am…

skywalking的相关概念我就不介绍了,有兴趣可以参看官网文档
以下提供以下简单示例手工上报一些对问题排查比较有用的一些信息。当然这些内容你也可以写成探针插件的形式,怎么开发探针插件也自行参考官方文档。此处仅在项目框架层面提供一些简单的示例,助于你快速入门。

手动上报异常信息

一般我们在项目中都会做全局异常拦截处理,最早我的方案是在gateway统一拦截封装,这样skywalking的agent组件就会不会到对应的异常信息进行上报到skywalkingserver端。但是接手了个没有gateway的微服务项目,统一由nginx进行转发,此时我们如果不将异常收敛在当前服务处理,异常信息势必会被抛到前端页面,显然是很不友好的行为。所以此时我们就得在当前服务内处理skywalking的异常信息上报。
正常我们的全局异常拦截处理类如下

@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class GlobalExceptionHandler implements ExcetionHandler {@ExceptionHandler(value = Exception.class)public JsonResult unhandledException(HttpServletResponse resp, Exception e){log.error("未处理异常:", e);JsonResult result = new JsonResult();result.setMessage(ErrorCode.UNCATCH_EXCEPTION.getMsg());result.setCode(ErrorCode.UNCATCH_EXCEPTION.getCode());return result;}}

此时由于异常被收敛在这个类统一处理,所以我们可以写个切面横切这个类的所有方法,拿到异常信息手动上报给skywalking组件,当然也可以写出插件的形式。不用在框架代码中手动上报。

切面代码如下:

@Aspect
public class ExceptionHandlerAspect {@Around(value = "@annotation(org.springframework.web.bind.annotation.ExceptionHandler)")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {Object[] args = joinPoint.getArgs();for (Object arg : args) {if (arg instanceof Throwable) {ActiveSpan.error((Throwable)arg);}}return joinPoint.proceed();}
}

是不是很简单。此处我们处理拦截异常之外,我们还可以对sql进行拦截,并将sql信息补全之后也统一上报给skywalking。这样出现业务问题时假如没有异常而是数据等问题,我们很容易可以通过链路追踪到对应的sql信息,除了sql我们还可以跟踪mq信息缓存信息等等都是一样的道理

手动上报sql信息

sql上报,sql上报我们可以写个sql拦截器,拦截statmentHander阶段或者拦截ParameterHandler阶段这两个阶段都是可以进行sql补全的。

ParameterHandler代码如下

@Intercepts({@Signature(type = ParameterHandler.class, method = "setParameters", args = {PreparedStatement.class})
}
)
public class MybatisLogInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {PreparedStatement statement = (PreparedStatement) invocation.getArgs()[0];PreparedStatement sql = null;Object proceed = invocation.proceed();if (Proxy.isProxyClass(statement.getClass())) {InvocationHandler handler = Proxy.getInvocationHandler(statement);if (handler.getClass().getName().endsWith(".PreparedStatementLogger")) {Field field = handler.getClass().getDeclaredField("statement");field.setAccessible(true);sql = (PreparedStatement) field.get(handler);}}ActiveSpan.tag(SpanConstant.ORM_TYPE, "mybatis");ActiveSpan.tag(SpanConstant.SQL_STATEMENT, sql);return proceed;}@Overridepublic Object plugin(Object target) {return Interceptor.super.plugin(target);}@Overridepublic void setProperties(Properties properties) {Interceptor.super.setProperties(properties);}
}

StatmentHander代码如下

@Intercepts(@Signature(type = StatementHandler.class,method = "parameterize",args = Statement.class)
)
public class MybatisTraceInterceptor implements Interceptor {private final static Logger log= LoggerFactory.getLogger(MybatisTraceInterceptor.class);public static <T> T realTarget(Object target) {if (Proxy.isProxyClass(target.getClass())) {MetaObject metaObject = SystemMetaObject.forObject(target);return realTarget(metaObject.getValue("h"));}return (T) target;}@Overridepublic Object intercept(Invocation invocation) throws Throwable {Object proceed = null;String sql=null;Statement statement = (Statement) invocation.getArgs()[0];proceed = invocation.proceed();try {PreparedStatementLogger psl = realTarget(statement);PreparedStatement ps = psl.getPreparedStatement();String pss = ps.toString();sql = pss.substring(pss.indexOf(":") + 1);ActiveSpan.tag(SpanConstant.ORM_TYPE, "mybatis");ActiveSpan.tag(SpanConstant.SQL_STATEMENT, sql);}catch (Exception e){log.error("sql上报skyWalking异常",e.getMessage());}return proceed;}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {}
}

手动上报出入参信息

这里同样有两种方案,一个使用切面的方式进行处理,一个使用Filter或者拦截器的方式进行处理,但是后两个阶段存在一个问题就是流的读取问题,所以如果选择后两者进行操作,还需要进行流的缓存封装,是比较不可取的方案。代码都差不多,这个我就不贴了。

注意:
过滤器和拦截器一般我们用来处理头部信息会比较好点。

http://www.15wanjia.com/news/9725.html

相关文章:

  • 大连个人网站开发制作河北百度seo关键词
  • 徐州鸿美网站建设杭州百度快速排名提升
  • ie 常用网站精准推广引流5000客源
  • 北京建设网站哪里好域名注册流程
  • 用php做购物网站案例适合小学生的最新新闻
  • 泸西县建设小学网站手机百度账号申请注册
  • 哈尔滨门户网站设计报价qq刷赞网站推广
  • 网站切换语言怎么做百度搜索关键词排名优化推广
  • 企业网站搭建的优点网站的seo方案
  • 网站收录什么意思下载app到手机上并安装
  • 网站的专题怎么做seo为什么要进行外部优化
  • 尚海整装为啥口碑那么差免费seo教程资源
  • 红酒网站建设策划书真正免费建站
  • 专门做运动装备的网站百色seo快速排名
  • 高端品牌网站建设(杭州)上海公司排名
  • 做封面哪个网站好百度搜索推广平台
  • 网站建设公司上海做网站公司头条搜索
  • linux做网站教程阐述网络推广的主要方法
  • 凡科做的网站不能被收录石家庄seo网站管理
  • 东莞企业营销型网站建设品牌网络seo方案外包
  • 小游戏网站怎么做武汉seo 网络推广
  • wordpress亮相关键词快速优化排名软件
  • 长沙好的网站建设公司最新的疫情防控政策和管理措施
  • 什么是权重高的网站公司seo是什么职位
  • 买了云服务器怎么做网站查关键词热度的网站
  • 免费网站建设排行表国家重大新闻
  • 物流网站首页图片成都seo
  • 崇礼做网站的公司seo自动工具
  • wordpress域名访问东莞优化网站制作
  • 个体户能否从事网站建设软文推广发布