当前位置:首页 > 科技  > 软件

基于Spring Boot,为网络请求添加唯一日志id

来源: 责编: 时间:2024-01-02 09:31:09 268观看
导读1 简介在Web应用程序的世界中,有效的请求监控和可追踪性对于维护系统完整性和诊断问题至关重要。Spring Boot是一种流行的Java框架,用于构建应用程序,并提供强大的日志记录功能。为了进一步丰富这一功能,可以通过为每个传

1 简介

在Web应用程序的世界中,有效的请求监控和可追踪性对于维护系统完整性和诊断问题至关重要。Spring Boot是一种流行的Java框架,用于构建应用程序,并提供强大的日志记录功能。为了进一步丰富这一功能,可以通过为每个传入请求添加唯一标识符来增强日志记录能力。这种简洁而强大的实践使开发人员能够跟踪和分析单个请求的流程,简化调试,并增强整个系统的可靠性。x6t28资讯网——每日最新资讯28at.com

本文我们强调在Spring Boot中为日志添加唯一标识符的重要性,介绍其实现方式以及其为应用程序开发和维护带来的众多优势好处。x6t28资讯网——每日最新资讯28at.com

2 问题描述

如今,每个服务通常都有多个服务器实例。有两种方法可以查看日志,一种是逐个访问各个服务器实例以查看日志,另一种是收集所有服务器的日志到一个集中地点进行查看。通常情况下,人们会选择第二种方法,使用像GCP中的Log Explorer这样的工具来搜索和分析日志。然而,由于来自多个服务器的大量日志,追踪这些日志变得困难。x6t28资讯网——每日最新资讯28at.com

此外,即使对于只有一个服务的单个服务器,由于并发请求和线程,日志会被打印出很多条。其中一个主要问题是日志打印的交错性,很难跟踪打印出的日志。x6t28资讯网——每日最新资讯28at.com

3 解决方案

为了解决上述问题,需要为每个日志条目关联一种标识符。我们可以生成一个唯一的ID,然后将该ID分配给特定请求的所有日志。因此,为特定请求生成的所有日志都具有唯一的ID。借助这个ID,可以便捷地跟踪日志。我们可以在日志中搜索此ID并获取特定请求的所有日志。在Spring Boot中实现这一点,可以使用AOP。x6t28资讯网——每日最新资讯28at.com

面向方面的编程(AOP)是一种编程范式,允许开发人员将横切关注点(如日志记录、安全性和事务管理)与核心业务逻辑分开模块化,促进代码的可重用性和可维护性。它通过引入“切面”在代码库的不同部分应用,而无需修改原始代码。x6t28资讯网——每日最新资讯28at.com

首先,需要创建一个请求过滤器,如下所示:x6t28资讯网——每日最新资讯28at.com

/** * 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@Slf4jpublic class Slf4jMDCFilter extends OncePerRequestFilter {    @Override    protected void doFilterInternal(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    protected boolean isAsyncDispatch(final HttpServletRequest request) {        return false;    }    @Override    protected boolean shouldNotFilterErrorDispatch() {        return false;    }}

上述代码对每个API请求运行一次,并将相同的唯一ID添加到为特定请求生成的所有日志中。接下来,需要将上述AOP过滤器注册为一个bean,如下所示:x6t28资讯网——每日最新资讯28at.com

@Configuration@RequiredArgsConstructorpublic class BeanConfig {    private final Slf4jMDCFilter slf4jMDCFilter;    @Bean    public FilterRegistrationBean<Slf4jMDCFilter> servletRegistrationBean() {        final FilterRegistrationBean<Slf4jMDCFilter> filterRegistrationBean = new FilterRegistrationBean<>();        filterRegistrationBean.setFilter(slf4jMDCFilter);        filterRegistrationBean.setOrder(2);        return filterRegistrationBean;    }}

然后,需要在日志配置文件中添加一个appender,如下所示:x6t28资讯网——每日最新资讯28at.com

<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">    <layout class="ch.qos.logback.classic.PatternLayout">        <Pattern>            %black(%d{ISO8601}) %X{Slf4jMDCFilter.UUID} %highlight(%-5level) [%blue(%t)] %yellow(%C{1}.): %msg%n%throwable        </Pattern>    </layout></appender>

4 结语

在Spring Boot中为每个请求的日志实现唯一标识符可以通过关联应用程序的不同组件中的日志,特别是在并发情况下,提供更好的可追踪性和调试能力。这个唯一标识符有助于跟踪请求的流程,识别潜在问题,并提高整个系统的可观察性。x6t28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-55176-0.html基于Spring Boot,为网络请求添加唯一日志id

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 九个技巧让你的PyTorch模型训练飞快!

下一篇: 九个技巧让你的PyTorch模型训练飞快!

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 三星获批量产iPhone 15全系屏幕:苹果史上最惊艳直屏

    按照惯例,苹果将继续在今年9月举办一年一度的秋季新品发布会,有传言称发布会将于9月12日举行,届时全新的iPhone 15系列将正式与大家见面,不出意外的话
Top