如何记录非 200 HTTP 响应的详细信息

如何记录非 200 http 响应的详细信息

本文介绍如何针对非 200 HTTP 响应,在独立的日志文件中记录更详细的信息,包括请求方法、路径和响应状态码。我们将探讨使用 Logback 配置实现这一目标,确保只在发生错误时才记录这些额外信息,从而避免污染常规日志。

在 Web 应用开发中,记录 HTTP 响应状态码以及相关信息对于问题排查和性能监控至关重要。特别是对于非 200 响应(例如 404 Not Found, 500 Internal Server Error),我们需要记录请求的详细信息,以便快速定位问题。本文将介绍如何使用 Logback 配置,在独立的日志文件中记录这些非 200 响应的详细信息,包括请求方法、路径和响应状态码。

使用 Logback 实现非 200 响应的独立日志记录

Logback 是一个强大的 Java 日志框架,它提供了灵活的配置选项,可以满足各种日志需求。我们可以通过配置 Logback 来实现只在发生非 200 响应时,才将请求方法、路径和响应状态码记录到独立的日志文件中。

实现思路如下:

定义一个 Logger: 创建一个专门用于记录非 200 响应的 Logger。配置 Appender: 为该 Logger 配置一个 Appender,将日志输出到独立的日志文件。使用 Filter 过滤日志: 配置一个 Filter,只允许非 200 响应的日志通过。

示例 Logback 配置 (logback-spring.xml)

                logs/non-200-responses.log        true                    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n                                            message.contains("response: 200") == false                        ACCEPT            DENY                                                            

配置详解:

MacsMind MacsMind

电商AI超级智能客服

MacsMind 141 查看详情 MacsMind : 定义了一个名为 Non200ResponseAppender 的 Appender,用于将日志输出到 logs/non-200-responses.log 文件。: 使用 EvaluatorFilter 来过滤日志。message.contains(“response: 200”) == false: 使用表达式判断日志消息是否包含 “response: 200″,如果不包含,则允许通过。: 定义了一个名为 non200ResponseLogger 的 Logger,并将 Non200ResponseAppender 配置给它。additivity=”false” 阻止日志被 root logger 重复处理。

代码示例 (Controller)

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class ProductController {    private static final Logger logger = LoggerFactory.getLogger(ProductController.class);    private static final Logger non200ResponseLogger = LoggerFactory.getLogger("non200ResponseLogger");    @GetMapping("/product/{id}")    public ResponseEntity getProduct(@PathVariable("id") Long id) {        logger.info("Fetching product with id: {}", id);        if (id > 100) {            String message = String.format("method: GET, path: /product/%d, response: 404 NOT_FOUND", id);            non200ResponseLogger.warn(message);            return new ResponseEntity("Product not found", HttpStatus.NOT_FOUND);        } else {            String message = String.format("method: GET, path: /product/%d, response: 200 OK", id);            non200ResponseLogger.warn(message); // 这条信息不会被记录到 non-200-responses.log            return new ResponseEntity("Product found", HttpStatus.OK);        }    }}

代码详解:

首先,我们获取了两个 Logger 实例,一个是用于记录常规日志的 logger,另一个是用于记录非 200 响应的 non200ResponseLogger。注意 non200ResponseLogger 的名称需要和 logback-spring.xml 中定义的 logger 的 name 属性一致。在 getProduct 方法中,我们首先使用 logger.info 记录常规日志。如果 id 大于 100,我们使用 non200ResponseLogger.warn 记录一条包含请求方法、路径和响应状态码的日志。这条日志将被记录到 logs/non-200-responses.log 文件中。如果 id 小于等于 100,我们也使用 non200ResponseLogger.warn 记录一条包含请求方法、路径和响应状态码的日志,但是因为状态码为 200,这条日志不会被记录到 logs/non-200-responses.log 文件中。

注意事项:

确保 Logback 的配置文件 (logback-spring.xml) 位于 classpath 下。需要根据实际情况调整 Appender 的配置,例如日志文件的路径、日志格式等。EvaluatorFilter 使用 Groovy 表达式,需要确保项目中包含 Groovy 依赖。

总结:

通过配置 Logback,我们可以轻松地实现非 200 HTTP 响应的独立日志记录。这种方法可以帮助我们快速定位问题,提高开发和运维效率。 通过灵活的配置,我们可以根据实际需求,记录更详细的信息,例如请求头、请求体等。 此外,还可以将日志发送到远程服务器,以便进行集中管理和分析。

以上就是如何记录非 200 HTTP 响应的详细信息的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/773196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Win7无法关机一直显示正在关机怎么解决?
上一篇 2025年11月26日 06:09:38
mysql查看表索引定义的方式 mysql查看表索引类型定义解析
下一篇 2025年11月26日 06:09:45

相关推荐

  • 在Java中如何通过Stream实现交集与差集

    交集可通过filter结合contains获取两集合共有元素,差集则保留一个集合中不在另一集合的元素,示例使用list1.stream().filter(list2::contains)得[3,4],filter(e->!list2.contains(e))得[1,2],建议将list2转为H…

    2026年9月22日
    000
  • 如何在mysql中搭建Percona XtraDB Cluster

    部署PXC需先配置系统环境并安装Percona源,随后在首个节点通过bootstrap启动集群,配置wsrep参数并创建SST用户,其他节点按相同配置加入集群,通过SHOW STATUS验证集群状态,确保cluster_size、wsrep_ready和cluster_status正常。 在MySQ…

    2026年9月22日
    100
  • Java Swing中按钮与文本框事件处理的实践指南

    本文将深入探讨Java Swing中ActionListener的正确使用方法,指导开发者如何为GUI按钮和文本框实现事件监听,从而处理用户输入、执行计算并实时更新界面。文章将重点讲解如何在actionPerformed方法中获取用户输入、进行类型转换、处理潜在异常,并提供一个完整的计算器示例来演示…

    2026年9月22日
    100
  • MySQL查询缓存配置及性能_MySQL重复查询响应速度提升

    MySQL查询缓存配置及性能_MySQL重复查询响应速度提升MySQL查询缓存配置及性能_MySQL重复查询响应速度提升MySQL查询缓存配置及性能_MySQL重复查询响应速度提升MySQL查询缓存配置及性能_MySQL重复查询响应速度提升

    mysql查询缓存已不适用于现代应用场景,尤其在8.0版本中被彻底移除。它仅适合读多写少、数据几乎不变的静态查询,通过内存直接返回结果提升性能;但在数据频繁更新时,因基于表级的缓存失效机制,每次写操作都会清空相关缓存,导致频繁重建缓存并消耗大量cpu资源,形成性能瓶颈。此外,sql语句匹配严格、内存…

    2026年9月22日 用户投稿
    400
  • Linux平台下的Eclipse配置

    在linux平台上配置eclipse时,可能会遇到一些常见的问题和优化需求。本文将详细介绍如何解决这些问题,并提供优化eclipse的建议。 启动Eclipse报错 启动Eclipse时,如果遇到以下错误: A Java Runtime Environment (JRE) or Java Devel…

    2026年9月22日
    000
  • 怎样在iPhone情侣模式中分享视频?快速上传和同步的实用方法

    怎样在iPhone情侣模式中分享视频?快速上传和同步的实用方法怎样在iPhone情侣模式中分享视频?快速上传和同步的实用方法怎样在iPhone情侣模式中分享视频?快速上传和同步的实用方法怎样在iPhone情侣模式中分享视频?快速上传和同步的实用方法

    最实用的方法是使用iCloud共享相簿,它支持情侣间视频快速上传与实时同步。首先双方需开启iCloud照片中的共享相簿功能,然后创建专属相簿并邀请对方加入。此后,任一方添加的视频会自动同步至对方设备,且不占用个人iCloud空间。相比AirDrop(限近距离)、即时通讯工具(压缩画质)或云盘(占存储…

    2026年9月22日 用户投稿
    000
  • AdobeIllustrator如何导出AI生成的图片?矢量图像保存的步骤

    首先明确输出需求,再选择“文件>导出>导出为…”或“文件>存储为…”,根据用途选取合适格式如SVG、PDF或AI,确保矢量信息保留,参数设置需匹配目标平台要求。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Adob…

    2026年9月22日
    000
  • PHP面向对象开发:解决父类构造器参数在嵌套子对象方法中丢失的问题

    在PHP面向对象编程中,我们经常会遇到类继承和对象组合的场景。一个常见的问题是,当父类构造函数接收参数并用于初始化内部的子对象时,该子对象的方法在后续调用中可能无法正确访问到这些参数,甚至显示为null。本文将深入探讨这一问题,并提供两种有效的解决方案。 引言与问题阐述 考虑一个典型的web应用架构…

    2026年9月22日
    000
  • 使用MockWebServer对FeignClient进行单元测试

    本文详细阐述了如何利用Spring Cloud LoadBalancer和MockWebServer对FeignClient进行高效单元测试。通过在测试配置中动态注册MockWebServer实例,并将其作为FeignClient的服务发现目标,开发者可以精确模拟后端API的行为,包括各种HTTP响…

    2026年9月22日
    000
  • Sublime快速定位MySQL死锁与阻塞问题_提高系统稳定性与并发处理能力

    Sublime快速定位MySQL死锁与阻塞问题_提高系统稳定性与并发处理能力Sublime快速定位MySQL死锁与阻塞问题_提高系统稳定性与并发处理能力Sublime快速定位MySQL死锁与阻塞问题_提高系统稳定性与并发处理能力Sublime快速定位MySQL死锁与阻塞问题_提高系统稳定性与并发处理能力

    mysql死锁和阻塞问题可通过sublime分析日志排查。1.使用关键词搜索及正则匹配快速定位死锁信息块;2.通过查找waiting状态事务并折叠无关内容聚焦阻塞链;3.结合general log与事务id查找sql执行顺序;4.利用语法高亮、列选择等功能提升日志可读性。这些方法能有效提高排查效率。…

    2026年9月22日 用户投稿
    100
  • Canva中AI生成图片如何导出?教你快速保存设计作品的方法

    答案:Canva中导出AI生成图片的操作与普通图片相同,点击右上角“分享”按钮,选择“下载”,可选PNG、JPG、PDF、SVG、MP4或GIF等格式;为保证画质,建议优先选用PNG格式,避免有损压缩,同时选择高分辨率和合适尺寸,Pro用户可进一步调整质量与透明背景设置;除下载外,还可通过分享链接、…

    2026年9月22日
    800
  • VSCode安全更新机制解析

    VSCode通过自动检查、数字签名验证和用户可控策略确保更新安全。启动时后台定期HTTPS请求检查新版本,每日一次;安装包经平台特定签名(Windows Authenticode、macOS代码签名、Linux GPG)验证完整性;用户可选自动更新、提示或关闭,企业可集中管控;微软通过安全入口响应漏…

    2026年9月22日
    100
  • Linux系统中文件属性和权限实战操作

    Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作Linux系统中文件属性和权限实战操作

    —–原本今天的文章是昨天晚上就要更新的,但是由于昨天晚上下班回到住的地方,发现停电了,所以就没写成。今天是在上一篇文章–linux系统中文件类型的基础上,继续进行深入的学习。好了,直接开干。 一、文件的操作权限: 1、在这之前我想还是很有必要介绍对文件的操作权限(…

    2026年9月22日 用户投稿
    200
  • PHP中为数组元素设置默认值的最佳实践:使用Null合并运算符

    本教程将介绍如何在PHP中为数组元素设置默认值,尤其当源数据可能为空或缺失时。通过利用PHP 7+提供的Null合并运算符(??),可以简洁高效地实现这一需求,避免冗长的条件判断,提高代码可读性和健壮性。 引言:处理缺失或空值时的数组赋值 在Web开发中,我们经常需要从用户请求、数据库查询或其他外部…

    2026年9月22日
    000
  • VSCode快速配置Dart:Flutter开发、中文提示、热加载

    安装vscode并下载flutter sdk,解压至无中文或特殊字符的路径;2. 将flutter sdk的bin目录添加到系统环境变量path中;3. 打开新终端执行flutter doctor,根据提示安装缺失的依赖;4. 在vscode扩展商店安装dart和flutter扩展;5. 确保在调试…

    2026年9月22日
    200
  • Inkscape如何导出AI生成的矢量图片?教你快速保存图像的步骤

    答案:在Inkscape中导出矢量图需根据用途选择格式,网页用优化SVG并转文本为路径,印刷则导出为PDF/EPS、转文字为路径、确保高分辨率位图,同时注意颜色模式与出血设置。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 在Inkscap…

    2026年9月22日
    700
  • MuseScore Studio 4.6.2 发布

    MuseScore 是一款支持多平台的所见即所得(WYSIWYG)音乐制谱工具。近日,MuseScore 4.6.2 正式上线,此次版本更新重点修复了多个关键性的回归问题。 值得一提的是,本版本重新恢复了对 macOS 10.15 及 macOS 11 系统的支持。此前在 4.6 版本中,由于升级至…

    2026年9月22日
    000
  • Laravel 8 登录后重定向至仪表盘的策略与实践

    本教程详细阐述了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种策略。我们将探讨如何通过配置 LoginController 的 $redirectTo 属性、利用 RouteServiceProvider 定义常量以及在自定义登录方法中进行精确控制来管理重定向流程。文章还涵盖了相关中间…

    2026年9月22日
    000
  • VSCode配置GDB调试器 深入掌握VSCode调试C程序技巧

    配置vscode中gdb调试c程序的核心是正确设置tasks.json和launch.json;2. tasks.json负责使用gcc -g编译生成带调试信息的可执行文件,确保prelaunchtask与launch.json中的program路径一致;3. launch.json指定调试器gdb…

    2026年9月22日
    100
  • java定时任务之quartz

    大家好,很高兴再次与大家见面,我是你们的朋友全栈君。 一、Quartz简介 在企业应用中,我们常常需要处理定时任务调度,比如每天凌晨生成前一天的报表,每小时生成一次汇总数据等。Quartz是一个著名的任务调度框架,它可以与J2SE和J2EE应用结合,功能非常强大,易于与Spring集成,使用起来非常…

    2026年9月22日
    100

发表回复

登录后才能评论
关注微信