javaweb日志管理系统(如何为Spring Boot Web应用的日志方便追踪?)java基础 / Java Web应用中的日志记录...

wufei123 发布于 2024-07-02 阅读(7)

前言在 Web 应用程序领域,有效的请求监控和可追溯性对于维护系统完整性和诊断问题至关重要Spring Boot 是一种用于构建 Java 应用程序的流行框架,它提供了强大的日志记录功能,可以通过为每个传入请求合并唯一标识符来进一步丰富这些功能。

这种简洁而强大的实践使开发人员能够跟踪和分析单个请求流,从而简化调试并增强整体系统的可靠性在本文中,我们探讨了在 Spring Boot 中向日志添加唯一 ID 的重要性,深入了解其实现以及它为应用程序开发和维护带来的众多好处。

javaweb日志管理系统(如何为Spring Boot Web应用的日志方便追踪?)java基础 / Java Web应用中的日志记录...

问题如今,我们通常为每项服务配备多个服务器现在有两种检查日志的方法,第一种是进入单个服务器实例并检查日志还有另一种方法可以从所有服务器收集日志,并且可以在一个地方查看它们人们通常使用第二种方法来搜索和分析日志。

现在,单个服务的多个服务器有如此多的日志,跟踪日志变得很困难此外,即使我们有一个服务的单个服务器,由于并发请求/线程,也会打印许多日志面临的一个主要问题是跟踪,因为日志以交错方式打印跟踪打印的日志变得非常困难。

解决方案为了解决上述问题,我们需要某种与每个日志条目关联的标识符我们可以生成一个唯一的 ID,然后将该 ID 分配给特定请求的所有日志因此,为特定请求生成的所有日志都将具有唯一的 ID借助这个ID,我们可以轻松地通过日志进行追踪。

我们可以在日志中搜索这个ID并获取特定请求的所有日志为了在 Spring Boot 中实现这一点,我们可以使用 AOP面向方面编程(AOP)是一种编程范式,允许开发人员将横切关注点(例如日志记录、安全性和事务管理)模块化,与核心业务逻辑分开,从而提高代码的可重用性和可维护性。

它通过引入“方面”来实现这一点,这些“方面”可以应用于代码库的不同部分,而无需更改原始代码首先,您必须创建一个如下所示的请求过滤器/** * A filter that adds a key to the Mapped Diagnostic Context (MDC) to each request so you can print a unique id in the log messages of each request **/。

@EqualsAndHashCode(callSuper = false) @Component@Slf4j publicclassSlf4jMDCFilterextendsOncePerRequestFilter

{ @OverrideprotectedvoiddoFilterInternal(final HttpServletRequest request, final HttpServletResponse response,

final FilterChain chain){ try { MDC.put(MDC_UUID_TOKEN_KEY, UUID.randomUUID().toString()); chain.doFilter(request, response); }

catch (Exception ex) { log.error(ERROR_FORMAT, "Exception occurred in filter while setting UUID for logs"

, ex); } finally { MDC.remove(MDC_UUID_TOKEN_KEY); } } @Override

protectedbooleanisAsyncDispatch(final HttpServletRequest request){ returnfalse; } @Override

protectedbooleanshouldNotFilterErrorDispatch(){ returnfalse; } } 上述代码针对每个 API 请求运行一次,并将相同的唯一 ID 添加到为特定请求生成的所有日志中。

接下来,您必须将上述 AOP 过滤器注册为 bean,如下所示:@Configuration@RequiredArgsConstructorpublicclassBeanConfig{ private

final Slf4jMDCFilter slf4jMDCFilter; @Beanpublic FilterRegistrationBean servletRegistrationBean

(){ final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(slf4jMDCFilter); filterRegistrationBean.setOrder(

2); return filterRegistrationBean; } } 之后,您需要在日志文件中添加一个附加程序,如下所示:

class="ch.qos.logback.core.ConsoleAppender">

> %black(%d{ISO8601}) %X{Slf4jMDCFilter.UUID} %highlight(%-5level) [%blue(%t)] %yellow(%C{

1.}): %msg%n%throwable 总结在 Spring Boot 中为每个请求在日志中实现唯一的 ID 可以通过关联应用程序不同组件之间的日志来实现更好的可跟踪性和调试,特别是在并发场景中。

这个唯一的标识符有助于跟踪请求流、识别潜在问题并提高整体系统的可观察性作者:JAVA旭阳链接:https://juejin.cn/post/7296017069414137892

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻72058