恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

SpringBoot 全局异常处理与日志记录——统一规范实战

  • 首页
  • 资讯中心
  • /
  • SpringBoot 全局异常处理与日志记录——统一规范实战

相关资讯

数据湖解决方案 2026/8/17 9:31:39
终极指南:如何在Mac上实现Windows风格的Alt+Tab窗口切换 2026/8/17 9:33:06
15分钟搞定黑苹果EFI:OpCore-Simplify图形化工具终极指南 2026/8/23 23:18:50

最新资讯

Petoi Quaddle四足机器人深度解析:从逆运动学到步态调试实战
AI项目源码分析教程:股票智能分析系统接入TaoToken统一Key实战
vtpgZero:开源FPGA视频测试图案发生器Verilog实现与实战指南
用 Claude Code 写 50 章网文后,我把 CLI 的 Base URL 改到 TaoToken 才跑通终章
VS Code + Continue插件接入TaoToken:在编辑器里调用GPT-5和Claude的配置指南
Type-C、USB-A、Lightning接口针脚定义与协议差异全解析

今日推荐

SSD不认盘怎么修?金士顿SV300板级排查与短接ROM进工厂模式
Unity 3D RPG开发:C#状态机与物理更新时机实战指南
AIoT开发工程师岗位全景:从嵌入式Linux到边缘计算与端侧AI部署

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

SpringBoot 全局异常处理与日志记录——统一规范实战

发布时间:2026/10/7 7:45:02
SpringBoot 全局异常处理与日志记录——统一规范实战 线上系统出问题不可怕可怕的是出了问题找不到原因。统一的异常处理和规范的日志记录是任何生产系统必备的基础设施。一、全局异常处理1. 自定义业务异常publicclassBusinessExceptionextendsRuntimeException{privateintcode;privateStringmessage;publicBusinessException(intcode,Stringmessage){super(message);this.codecode;this.messagemessage;}// 常用错误码publicstaticBusinessExceptionnotFound(Stringmsg){returnnewBusinessException(404,msg);}publicstaticBusinessExceptionbadRequest(Stringmsg){returnnewBusinessException(400,msg);}publicstaticBusinessExceptionunauthorized(Stringmsg){returnnewBusinessException(401,msg);}publicstaticBusinessExceptionforbidden(Stringmsg){returnnewBusinessException(403,msg);}}2. 全局异常处理器RestControllerAdvicepublicclassGlobalExceptionHandler{privatestaticfinalLoggerlogLoggerFactory.getLogger(GlobalExceptionHandler.class);ExceptionHandler(BusinessException.class)publicResultVO?handleBusiness(BusinessExceptione){log.warn(业务异常: code{}, msg{},e.getCode(),e.getMessage());returnResultVO.error(e.getCode(),e.getMessage());}ExceptionHandler(MethodArgumentNotValidException.class)publicResultVO?handleValidation(MethodArgumentNotValidExceptione){Stringmsge.getBindingResult().getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(Collectors.joining());returnResultVO.error(400,msg);}ExceptionHandler(ConstraintViolationException.class)publicResultVO?handleConstraint(ConstraintViolationExceptione){Stringmsge.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());returnResultVO.error(400,msg);}ExceptionHandler(NoHandlerFoundException.class)publicResultVO?handle404(NoHandlerFoundExceptione){returnResultVO.error(404,接口不存在: e.getRequestURL());}ExceptionHandler(Exception.class)publicResultVO?handleOther(Exceptione){log.error(系统异常,e);returnResultVO.error(500,服务器繁忙请稍后重试);}}二、统一日志记录1. 请求日志拦截器ComponentpublicclassLogInterceptorimplementsHandlerInterceptor{privatestaticfinalLoggerlogLoggerFactory.getLogger(LogInterceptor.class);OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler){// 记录请求开始时间request.setAttribute(startTime,System.currentTimeMillis());returntrue;}OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex){longstart(long)request.getAttribute(startTime);longdurationSystem.currentTimeMillis()-start;log.info([{}] {} {} → {} ({}ms),request.getMethod(),request.getRequestURI(),request.getQueryString()!null??request.getQueryString():,response.getStatus(),duration);}}2. 注册拦截器ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{AutowiredprivateLogInterceptorlogInterceptor;OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(logInterceptor).addPathPatterns(/api/**);}}3. 日志级别配置logging:level:root:INFOcom.zhang:DEBUGcom.zhang.seckill.mapper:TRACEfile:path:/var/log/appname:${logging.file.path}/app.loglogback:rolling policy:max-history:30max-file-size:100MB三、日志最佳实践// ✅ 正确带参数占位符log.info(用户 {} 创建订单 {},userId,orderNo);// ❌ 错误字符串拼接log.info(用户 userId 创建订单 orderNo);// ✅ 正确包含上下文信息log.warn(支付失败: orderNo{}, amount{}, error{},orderNo,amount,error);// ❌ 错误没信息量的日志log.info(支付失败); 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号