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

发布时间:2026/7/13 2:38:25

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/爬虫 实战干货不让你白来。

相关新闻

终极VLC皮肤指南:3分钟让你的播放器焕然一新

终极VLC皮肤指南:3分钟让你的播放器焕然一新

2026/7/13 2:36:49

终极VLC皮肤指南:3分钟让你的播放器焕然一新 【免费下载链接】VeLoCity-Skin-for-VLC Castom skin for VLC Player 项目地址: https://gitcode.com/gh_mirrors/ve/VeLoCity-Skin-for-VLC 厌倦了VLC播放器那千篇一律的默认界面吗?想让你的观影体验…

安装Neovim

安装Neovim

2026/7/13 2:29:45

Install - Neovim 第一步:清理旧配置 打开 CMD(管理员身份),执行: cmd rmdir /s /q "C:\Users\Administrator\AppData\Local\nvim" rmdir /s /q "C:\Users\Administrator\AppData\Local\nvim-data&…

allure的安装及配置

allure的安装及配置

2026/7/9 9:04:29

allure是一款轻量级并且非常灵活的开源 测试报告框架。 它支持绝大多数测试框架,它简单易用,易于集成。 一、allure的下载 -下载网址(allure官网):Allure Report — Open-source HTML test automation report tool …

MA12070与PIC18F46K40打造高效D类音频放大器方案

MA12070与PIC18F46K40打造高效D类音频放大器方案

2026/7/13 2:35:32

1. 项目背景与核心器件选型在当今音频设备市场,消费者对便携性与音质的要求越来越高。传统AB类放大器虽然音质出色,但效率低下导致设备笨重;而普通D类放大器虽效率高,却常因电磁干扰(EMI)问题影响音质。MA12070PIC18F46K40的组合恰…

Win10系统安装全攻略:从U盘启动到驱动优化的完整教程

Win10系统安装全攻略:从U盘启动到驱动优化的完整教程

2026/7/13 2:35:32

很多朋友在电脑使用过程中都会遇到系统卡顿、蓝屏或中毒等问题,这时候重装系统就成了最直接的解决方案。但一想到要找电脑店花几百元重装,很多人就望而却步了。其实Win10系统安装并不复杂,只要掌握正确方法,完全可以自己动手完成&…

网络安全深度洞察:穿透数字迷雾,构建下一代防御体系

网络安全深度洞察:穿透数字迷雾,构建下一代防御体系

2026/7/13 2:35:32

一、网络安全定义(动态攻防视角) 网络安全的本质,是在数字资产的暴露面与攻击者的入侵路径之间,建立持续性的不对称优势。它所保护的对象可以精炼为三个层面: 表层资产:应用程序、服务器、数据库、终端设备…

微信8.0.31数据库密码逆向:IMEI写死机制与SQLCipher加密破解

微信8.0.31数据库密码逆向:IMEI写死机制与SQLCipher加密破解

2026/7/13 2:35:32

1. 项目概述:从一份加密文件到可读的聊天记录如果你曾经因为手机故障需要恢复微信聊天记录,或者出于技术研究的目的,尝试过直接访问手机里那个名为EnMicroMsg.db的数据库文件,那你大概率会碰壁。这个文件是微信在本地存储聊天记录…

AI Agent开发实战:从RAG原理到LangChain应用完整指南

AI Agent开发实战:从RAG原理到LangChain应用完整指南

2026/7/13 2:35:32

1. 先搞清楚 AI Agent 开发到底需要哪些核心能力如果你刚开始接触 AI Agent,最容易被各种概念和框架绕晕。其实从实际开发角度看,AI Agent 的核心能力可以拆解为三个层次:第一层是基础编程能力。Python 是绕不开的,但不需要你成为…

Java移位运算:补码的魔法让负数秒变正数,你还在傻傻算原码?

Java移位运算:补码的魔法让负数秒变正数,你还在傻傻算原码?

2026/7/13 2:25:31

正数的反码是其本身 负数的反码是这样得到的, 在其原码的基础之上, 符号位保持不变, 其余各个 bit 位进行取反操作。 [+5](原码)= [](反码) [ …

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)在口腔微生物分子机制研究中,SepM 蛋白酶是调控变异链球菌群体感应、致龋菌素合成的核心功能蛋白,体外功能验证、抗体开发均依赖高纯度可溶性 SepM 蛋白。当前原核表达体系针对 SepM 存在三大技…

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

2026/7/13 0:05:25

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…