SpringBoot定义优雅全局统一Restful API 响应框架五

news2024/11/18 0:00:21

闲话不多说,继续优化 全局统一Restful API 响应框架 做到项目通用 接口可扩展。

如果没有看前面几篇文章请先看前面几篇

SpringBoot定义优雅全局统一Restful API 响应框架

SpringBoot定义优雅全局统一Restful API 响应框架二

SpringBoot定义优雅全局统一Restful API 响应框架三

SpringBoot定义优雅全局统一Restful API 响应框架四

这里解决上一篇留下问题 如何实现接口错误国际化。 还有上一篇错误提示也不是很友好

我们可以在进一步抽象出通用异常接口

异常信息应由固定异常编码信息加上详细的错误自定义信息。

上一篇最后错误 提示依然不够友好具体。我们可以在具体到哪个字段

还有未知错误返回异常,这里之前提到要在·全局异常处理中接入自己的日志输出处理,我们只是单纯的打印在控制台。肯定是不行

如果项目中不做任何处理默认就会走Tomcat服务器日志处理逻辑,输出到
catalina 文件中 我们这里把这个问题处理一下。

公共错误异常类

自定义异常类继承运行时异常。自定义错误编码,和错误信息枚举

/**
* @author 公众号 程序员三时
* @version 1.0
* @date 2023/4/29 00:15
* @webSite https://github.com/coder-amiao
* 通用业务异常封装
*/
@Data
public class BusinessException extends RuntimeException {
   /**
    * 自定义异常编码
    */
   private String code;

   public BusinessException(String code, String message) {
       super(message);
       this.code = code;
   }

   public BusinessException(ResultCode resultCodeEnum) {
       super(resultCodeEnum.getMessage());
       this.code = resultCodeEnum.getCode();
   }

   public BusinessException(ResultCode resultCodeEnum, String msg) {
       super(resultCodeEnum.getMessage() +" " +msg);
       this.code = resultCodeEnum.getCode();
   }
}

其他异常类也是如此

这里主要说一下如何把错误日志输出到指定服务器路径的指定log文件

日志文件按照类型和时间划分,一天一个按照指定大小

这样就方便自己查询错误日志

日志配置文件

logback-spring.xml springboot约定配置名称,可以读取加载属性文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>shop-api</contextName>
    <!--定义日志文件的存储地址 从springboot配置文件中获取路径-->
    <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
    <!--springboot配置文件中获取日志级别-->
    <springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
    <!-- <property name="log.path" value="log" />-->
    <property name="log.maxHistory" value="90" />
    <property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %yellow(%thread) %green(%logger) %msg%n"/>
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %logger %msg%n"/>

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.colorPattern}</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/info/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>3MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/error/error.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>3MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="debug">
        <appender-ref ref="console" />
    </root>

    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>
</configuration>

代理已经更新到 github仓库脚手架项目

关注公众号,程序员三时 持续输出优质内容 希望给你带来一点启发和帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发微信小程序,常用的开发组件有哪些?

随着微信小程序开发的持续升温&#xff0c;小程序开发也变得越来越流行&#xff0c;因为小程序不仅能帮助企业解决推广的问题&#xff0c;还能为企业带来可观的收益。但是很多企业并不知道如何开发微信小程序&#xff0c;而市面上的开发组件又有很多种&#xff0c;不知道怎么选…

restful相关知识

一. 接口编程简介 1 背景 ​ 随着互联网的发展, 尤其是移动互联为代表的Web3.0时代. 客户端层出不穷, 以APP、微信、PC浏览器为代表, 服务端业务逻辑是基本一致的. ​ 那么有没有一种方式可以做到”一次编写,随时接入”呢? 目前比较流行的方案就是"接口编程" 2 …

DevOps - (3)使用SOPS 和Terraform来加密/解密敏感信息文件

一&#xff1a;背景 每个人都想将自己的敏感数据以加密格式存储在一个安全的地方。例如我们的数据库的账号密码&#xff0c;不能以纯文本的方式来记录。让我们利用Mozilla SOPS以一种安全的方式实现它。SOPS支持将文件加密为二进制文件&#xff0c;除此之外&#xff0c;它还具…

尘埃粒子计数器 审计追踪 权限管理 洁净室等级确认干货分享

尘埃粒子计数器实用干货汇总 随着我国医药行业的不断发展&#xff0c;越来越多的医药企业需要应用洁净技术以达到控制实验室安全卫生的目的。在医药、电子、机械微生物等行业中&#xff0c;需要严格把关空间的洁净度以符合相关的标准和产品的质量。其中包括对各种洁净等级的工作…

Qt 助手简介

在探讨Qt帮助框架之前&#xff0c;我们先了解一下Qt帮助文档&#xff0c;可以让大家更好的理解。 当你使用Qt时&#xff0c;你可能会发现Qt帮助文档是一个非常有用的资源。Qt帮助文档提供了关于Qt框架和其各种组件的详细信息&#xff0c;包括类和函数的文档、示例代码和教程等…

抖音seo系统源码*SaaS+部署搭建(开源)

抖音seo源码&#xff0c;抖音seo系统源码&#xff0c;抖音seo系统搭建&#xff0c;部署 抖音作为一个全球性的短视频平台&#xff0c;用户数量已经超过了10亿。这也给企业带来了巨大的发展机遇。为了吸引更多的用户&#xff0c;企业可以通过抖音seo源码来提高自己的搜索引擎排…

有没有什么好的C++项目推荐?

据我粗略估计&#xff0c;问我“有没有什么好的C项目推荐“这个问题出现的频率仅次于“问我帅不帅“。 「C」是一门贴近底层的语言&#xff0c;不像「Java」那样能够快速搭建一个业务系统&#xff0c;比如「XX」秒杀系统、「XX」电商系统这种看着“高大上“的项目&#xff0c;「…

python按行写入json文件,每一行都是一个标准json对象,但是整体文件却非json对象

今天这篇文章主要是一个小小的偏向于应用的实践&#xff0c;为啥会写这个&#xff0c;还要回溯到2017年&#xff0c;那时候做项目的时候有一个是要做数据处理分析的工作&#xff0c;给到我的数据集我拿到的时候总觉得怪怪的&#xff0c;每一行都是一个字典对象&#xff0c;但是…

聊聊部署在K8S的项目如何获取客户端真实IP

前言 最近部门有个需求&#xff0c;需要对一些客户端IP做白名单&#xff0c;在白名单范围内&#xff0c;才能做一些业务操作。按我们的部门的一贯做法&#xff0c;我们会封装一个client包&#xff0c;提供给业务方使用。&#xff08;注&#xff1a; 我们的项目是运行在K8S上&a…

LAMP的实战应用之部署wordpress论坛,并实现正常访问登录论坛

目录 环境配置&#xff1a; 一、安装配置基础环境 步骤一&#xff1a;配置本地yun 步骤二&#xff1a;安装Remi 仓库配置包&#xff08;清华源获取&#xff09; 步骤三&#xff1a;配置Remi 仓库配置包 步骤四&#xff1a;安装php的加速器配置 步骤五&#xff1a;启动服…

Cesium实战 - 实现大气云层效果

Cesium实战 - 实现大气云层效果 Cesium 实现大气云层效果主要思路核心代码在线示例 Cesium 实现大气云层效果 在实际开发中&#xff0c;一般会有天气的效果&#xff0c;雨雪雾比较常见&#xff0c;相关的博客也很多&#xff0c;但是关于云层的天气效果还是比较少&#xff0c;而…

【调峰】储能辅助电力系统调峰的容量需求研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

经典神经网络(6)ResNet及其在Fashion-MNIST数据集上的应用

经典神经网络(6)ResNet及其在Fashion-MNIST数据集上的应用 1 ResNet的简述 ResNet 提出了一种残差学习框架来解决网络退化问题&#xff0c;从而训练更深的网络。这种框架可以结合已有的各种网络结构&#xff0c;充分发挥二者的优势。 ResNet以三种方式挑战了传统的神经网络架…

【LeetCode】342. 4的幂

342. 4的幂&#xff08;简单&#xff09; 方法一&#xff1a;二进制 思路 首先考虑一个数字是不是 2 的整数次方&#xff1a;如果一个数字 n 是 2 的整数次方&#xff0c;那么它的二进制一定是 0...010...0 这样的形式&#xff0c;将它和 -n 按位与的结果一定是它本身。如果 …

前沿质谱应用沙龙分享会暨苏州百趣落成仪式即将开幕!

质谱作为一项医学检验新技术&#xff0c;凭借高特异性、高灵敏度、多指标检测等优势&#xff0c;成为了体外诊断领域最富生命力的新技术之一。目前质谱技术能够准确的测定多种生物小分子代谢物&#xff0c;且质谱在大分子物质例如蛋白质方面也应用的非常广泛。目前&#xff0c;…

要电脑重装系统装在哪个盘最好

在进行电脑重装系统时&#xff0c;选择一个合适的系统安装盘是非常重要的。本文将为您介绍如何选择最佳的系统安装盘&#xff0c;以确保系统性能和稳定性的最佳表现。 工具/原料&#xff1a; 系统版本&#xff1a;windows系统 品牌型号&#xff1a;华硕VivoBook14 软件版本…

张小龙发明了小程序,是否意味着失败?

今天微信小程序上线&#xff0c;从开发到上线仅仅用了四天时间&#xff0c;这是一个了不起的成就。 小程序诞生以来&#xff0c;一直存在着一种声音&#xff1a;它是张小龙“伟大的发明”&#xff0c;是微信“伟大的创新”。然而&#xff0c;张小龙在小程序发布会上宣布&#…

Spark SQL概述、数据帧与数据集

文章目录 一、准备工作1、准备数据文件2、启动Spark Shell 二、加载数据为Dataset1、读文件得数据集 三、给数据集添加元数据信息1、定义学生样例类2、导入隐式转换3、将数据集转换成学生数据集4、对学生数据集进行操作&#xff08;1&#xff09;显示数据集内容&#xff08;2&a…

认识熟悉 Stable Diffusion(SD)基本参数

界面样式 界面参数 界面参数说明prompt希望生成的图片的描述negative prompt不希望在图片中出现的描述Batch size每次生成的图片个数Width图片宽度Height图片高度 这里需要注意的就是尺寸&#xff0c;尺寸并非越大越好&#xff0c;需要根据自己的配置和需求适当调整&#xff…

node.js+vue学生读书笔记共享分享系统

从上面的描述中可以基本可以实现软件的功能: 1、开发实现读书笔记共享平台的整个系统程序; 2、管理员;首页、个人中心、用户管理、笔记分享管理、个人笔记管理、管理员管理、交流互动、系统管理等。 3、用户:首页、个人中心、笔记分享管理、个人笔记管理、我的收藏管理。 4、前…