当前位置: 首页 > 网络应用技术

使用Javaagent实现代码不舒服的记录

时间:2023-03-07 17:09:48 网络应用技术

  运行日志的程序对于系统问题,业务监控等非常重要。大多数Java记录日志都是通过LogBack,Log4J等框架实现的。我以前已经根据公司的日志规格封装了一个日志插头包装。LOG打印按日志打印规范,收集和维护系统收集以收集日志和通过查看日志的开发。这有一些问题。例如,数据处理的故障在查询日志中非常困难,因为日志中的日志中没有处理,因为日志中的日志中没有处理,因为日志中的日志中没有处理。,因为日志中的日志中没有处理,因为日志中的日志中没有处理,因为日志中的日志中没有处理,因为日志中的日志中没有处理。该过程的背景意味着打印的每一天都被打破了,这根本无法完成链接跟踪。每次调查问题都不会太痛苦;此外,还没有一些接口可以直观地从日志中反映接口执行时间。当然,我们可以使用工具来使记录接口消耗,但是每次我们想查看它时,我们都不适合使用接口执行时间。是否有一种解决痛苦的方法一种方法和时间和时间添加时间和时间为系统日志而不转换系统。

  首先,在增加日志内容的能力方面定义和实现的存储空间。我们定义一个课程。我在这里将其命名为链接上下文。在此类别中。以下代码,使用存储,已解释了存储提供的两种方法。至于为什么使用储物Traceid是由于线程隔离而使用的,则不会在此处解释。

  然后我增强了,我在这里借了开源工具,并增强了字节代码。代码如下:

  org.agent.enhance.bytes.logback.logbackbytesenhance代码如下:

  我的程序是基于的,因此我想配置HTTP请求的拦截器。如果接口是Dubbo,SpringCloud等,则可以通过提供的过滤器或拦截器处理其他RPC框架。我将首先在此处实现SpringMVC。拦截器配置,拦截器配置代码如下:

  Springwebinterceptorconfiguration

  WebMVCCONFIGURATION添加了拦截器

  以下代码实现接口并重写添加拦截器的方法。这里添加了两个拦截器。一个负责清理,另一个负责记录接口的执行时间。

  该配置会自动组装,并且目录中创建的内容如下:

  TraceID清理拦截器

  接口时间拦截器

  已经实现了记录增强和HTTP接口截距的功能。现在,您只需要写Javaagent即可。代码很简单。在该方法中,代码如下:

  关于Javaagent技术的详细信息,您不会在此处介绍它。您可以参考

  该程序使用Maven包装,包装插头 - 如下

  Javaagent没有增强的日志效应

  下图显示了没有对数增强的测试结果。我致电4个接口。日志打印的日志没有跟踪。可以想象要找出业务系统日志检查是否有多么困难。

  通过Javaagent增强的日志效果

  方法一:

  直接想法设置程序启动参数,如下所示:

  方法两个:

  打包测试程序,然后执行命令:java -javaagent:您的路径 /java-agent.jar-jar-jar your path /java-agent-test.jar

  我在这里使用一种方法,测试结果如下所示:

  您可以看到在红色帧中的日志内容中添加了一个随机字符串。这是我们添加的跟踪,拦截器起作用。记录接口执行时间。接口执行完成当前线程的跟踪。

  通过诸如Javaagent和Bytecode增强的技术,可以实现代码的日志增强,但实际上确实存在某些限制。链接跟踪,因为我之前实施的日志工具包可以通过重写和重写和同步的日志来重写和同步日志修改线程池,但我目前尚未支持此方法。