尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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/爬虫 实战干货不让你白来。
RELATED

相关推荐

嵌入式EEPROM存储方案:M95M04与MKV44F128VLH16实战

嵌入式EEPROM存储方案:M95M04与MKV44F128VLH16实战

1. 项目背景与硬件选型解析在嵌入式系统和工业控制领域,持久化存储用户配置数据是常见需求。M95M04(STMicroelectronics的EEPROM)与MKV44F128VLH16(NXP的Kinetis K系列MCU)的组合为这类应用提供了可靠解决方案。M95M04…

📅 2026/10/27 6:44:39
2026企业级AI Agent智能体开发平台推荐 五大主流产品中立测评选型指南

2026企业级AI Agent智能体开发平台推荐 五大主流产品中立测评选型指南

前言 随着数字化转型持续推进,AI Agent已经从基础对话工具延伸至企业全流程业务载体,能够承接办公处理、运营管理、数据统计、跨角色协同等多元化工作。市面上各类 AI Agent 开发平台定位差异明显,适配的企业规模、行业场景各有侧重。 不少市…

📅 2026/10/13 7:36:07
B. Crimson Triples(Codeforces 2238)

B. Crimson Triples(Codeforces 2238)

B. Crimson Triples - 题解 题意简述 给定 n&#xff0c;要统计有多少个有序三元组 (a, b, c) 满足&#xff1a; 1 < a, b, c < n并且&#xff1a; gcd(lcm(a, b), lcm(b, c)) gcd(a, c)注意三元组是有序的&#xff0c;(1, 2, 3) 和 (3, 2, 1) 算不同。 核心结论 一个三…

📅 2026/10/24 4:23:21
MORE NEWS

更多资讯

📰

基于SpringBoot的班主任管理系统设计与开题实践

带过班的老师心里都清楚&#xff0c;班主任这活儿最耗人的从来不是上课&#xff0c;而是那些琐碎到不行的表格和台账&#xff1a;谁请假了、谁旷课了、这次月考谁退步了、评优名额怎么分、家长电话打过来问孩子最近表现怎么样。这些事单拎出来都不难&#xff0c;难在它们分散在…

📰

开源合规下编程语言选择与许可证管理实践

1. 开源合规浪潮下的编程语言选择困境在软件开发领域&#xff0c;开源合规已经成为不可忽视的趋势。根据2023年开源安全基金会(OpenSSF)的报告&#xff0c;超过90%的企业级应用包含开源组件&#xff0c;其中78%存在许可证合规问题。作为项目的基础工具&#xff0c;编程语言的选…

📰

cocos2d-x中libluajit.a的ABI兼容性解析与集成指南

简介&#xff1a;本资源是面向Cocos2d-x游戏开发者的iOS平台兼容性修复包&#xff0c;专为解决cocos2d-x项目在iPhone 5S及更高型号设备上因libluajit.a不兼容导致的lua_open()崩溃问题而整理。压缩包内含3046个文件&#xff0c;主体为2321个头文件&#xff08;h&#xff09;、…

📰

班主任管理系统毕业设计:SpringBoot+Vue+MySQL实战与开题

接手过好几回“班主任管理系统”这类题目的活儿&#xff0c;时间点基本都集中在开题季那两个月。对方丢过来的信息往往就只有标题这十来个字&#xff0c;后面跟一句“源码开题”&#xff0c;翻译成人话其实是两件事&#xff1a;一套能跑起来、能演示、能应付检查的代码&#xf…

📰

KAN网络模型解析:原理、实现与混合架构应用

1. 2025年最值得关注的KAN网络模型全景解析作为一名长期跟踪神经网络架构演进的技术博主&#xff0c;我注意到KAN&#xff08;Kolmogorov-Arnold Networks&#xff09;正在成为继Transformer之后最受关注的新型网络结构。与传统的MLP&#xff08;多层感知机&#xff09;不同&am…

📰

船舶柴油机可解释故障诊断实战方法

1. 项目概述&#xff1a;为什么船舶柴油机的“黑箱诊断”必须被打开你有没有见过这样的场景&#xff1a;一艘远洋货轮在公海航行途中&#xff0c;主机突然功率下降、排烟变浓、缸套温度异常升高——轮机员拿着测温枪、听音棒、振动仪围着柴油机转了三圈&#xff0c;数据都看了&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬