当前位置: 首页 > news >正文

Spring Boot全局异常处理与日志监控实战指南

引言

在微服务架构中,统一的异常处理和完善的日志监控是保障系统稳定性的基石。本文将结合Spring Boot特性,详细讲解如何实现:

  1. 自定义全局异常处理器
  2. Logback日志框架的精细化配置
  3. 异常与日志的联动监控机制

一、全局异常处理体系构建

1.1 自定义异常类设计

public class BusinessException extends RuntimeException {private final int code;public BusinessException(String message, int code) {super(message);this.code = code;}// Getter...
}

1.2 全局异常处理器实现

@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {@ExceptionHandler(BusinessException.class)public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex, HttpServletRequest request) {log.error("业务异常: {} - URL: {}", ex.getMessage(), request.getRequestURI());return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse(ex.getCode(), ex.getMessage()));}@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleGlobalException(Exception ex, HttpServletRequest request) {log.error("系统异常: {} - URL: {}", ex.getMessage(), request.getRequestURI(), ex);return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse(500, "服务器内部错误"));}
}

1.3 统一响应结构

@Data
public class ErrorResponse {private int code;private String message;private long timestamp = System.currentTimeMillis();
}

二、Logback日志框架配置详解

2.1 基础配置文件(logback-spring.xml)

<configuration><property name="LOG_PATH" value="./logs/app"/><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 文件输出 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 环境区分配置 --><springProfile name="dev"><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root></springProfile><springProfile name="prod"><root level="WARN"><appender-ref ref="FILE"/></root></springProfile>
</configuration>

2.2 高级配置技巧

  1. MDC线程上下文
MDC.put("traceId", UUID.randomUUID().toString());
log.info("处理业务请求");
MDC.clear();
  1. 异步日志
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>512</queueSize><appender-ref ref="FILE"/>
</appender>
  1. 日志过滤
<logger name="com.example.敏感包" level="ERROR" additivity="false"/>

三、异常与日志联动监控

3.1 告警日志识别模式

.*系统异常.*|.*BusinessException.*|.*TimeoutException.*

3.2 集成监控系统示例(伪代码)

@Aspect
@Component
public class LogMonitorAspect {@Around("execution(* com.example.controller..*.*(..))")public Object monitorLog(ProceedingJoinPoint joinPoint) {try {return joinPoint.proceed();} catch (Throwable ex) {if (ex instanceof BusinessException) {sendAlert("业务异常告警", ex.getMessage());}throw ex;}}
}

四、最佳实践建议

  1. 分级日志策略

    • 开发环境:DEBUG+INFO
    • 测试环境:INFO+WARN
    • 生产环境:WARN+ERROR
  2. 日志保留策略

    • 开发环境:7天
    • 生产环境:30天(热数据)+ 1年(冷数据)
  3. 性能优化

    • 使用参数化日志避免字符串拼接
    • 合理设置异步日志队列大小
    • 生产环境禁用CONSOLE输出

总结

通过构建全局异常处理体系与精细化日志监控方案,可实现:

  1. 接口返回标准化错误信息
  2. 快速定位系统问题根源
  3. 满足合规性审计要求
  4. 为监控告警系统提供数据基础

文章特点
6. 完整代码示例与配置文件
7. 生产环境经验总结
8. 异常与日志的联动设计
9. 不同环境配置差异化处理
10. 性能优化建议

可根据实际项目需求调整日志输出格式、存储策略和监控告警规则。

http://www.xdnf.cn/news/1249633.html

相关文章:

  • 华硕携多款明星电竞显示器亮相 ChinaJoy2025,联袂 TCL 华星打造沉浸体验
  • 鼠标下滑时回跳问题
  • 从 “认知优势” 到现实赋能:DPVR AI Glasses 重构智能穿戴价值
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter
  • 4、docker数据卷管理命令 | docker volume
  • docker run 入门到进阶:容器启动背后的门道
  • C++音视频流媒体开发面试题:音视频基础
  • 什么是RabbitMQ?
  • OpenObserve非sql模式 query editor 中 xx like ‘|’报错如何处理
  • mysql 8递归查询
  • 科技云报到:Agent应用爆发,谁成为向上托举的力量?
  • 网络编程epoll学习
  • UE编辑器相机窗口运行时相机fov 大小不一致
  • Vue Router 路由的创建和基本使用(超详细)
  • 手动开发一个TCP服务器调试工具(二):无界面 TCP 通信服最小实现
  • Linux网络编程基础-简易TCP服务器框架
  • 大前端游戏应用中 AI 角色行为智能控制
  • 网站、域名、IP在什么场景下需要备案
  • Fabric.js从入门学习到实现labelImg矩形多边形标注工具【上】
  • SmartMediaKit 模块化音视频框架实战指南:场景链路 + 能力矩阵全解析
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • GPU 优化-用 tensor core实现5G Massive MIMO 64x64
  • Linux系统之Docker命令与镜像、容器管理
  • nginx代理出https,request.getRequestURL()得到http问题解决
  • imx6ull-驱动开发篇10——pinctrl 子系统
  • 福彩双色球第2025090期篮球号码分析
  • 生成式 AI 重塑自动驾驶仿真:4D 场景生成技术的突破与实践
  • Spring之【初识AOP】
  • Agent安全机制:权限控制与风险防范
  • 海康威视相机,MVS连接成功,但无图像怎么办?