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

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

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

1 简介

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

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

2 问题描述

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

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

3 解决方案

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

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

首先,需要创建一个请求过滤器,如下所示:7TX28资讯网——每日最新资讯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,如下所示:7TX28资讯网——每日最新资讯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,如下所示:7TX28资讯网——每日最新资讯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中为每个请求的日志实现唯一标识符可以通过关联应用程序的不同组件中的日志,特别是在并发情况下,提供更好的可追踪性和调试能力。这个唯一标识符有助于跟踪请求的流程,识别潜在问题,并提高整个系统的可观察性。7TX28资讯网——每日最新资讯28at.com

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

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

上一篇: Saga 模式 | 如何使用微服务实现业务事务

下一篇: Saga 模式 | 如何使用微服务实现业务事务

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 华为将推出盘古数字人大模型 可帮助用户12小时完成数字人生成

    在今日举行的2023年华为云数字文娱AI创新峰会上,华为云全球Marketing与销售服务总裁石冀琳表示,华为云将在后续推出盘古数字人大模型,可帮助用户12小
  • 2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会隆重举行

    9月18日,2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会在青岛国际新闻中心隆重举行。发布会上青岛市政府领导联袂出席,对本次双展会情
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top