经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
SpringBoot定义优雅全局统一Restful API 响应框架五
来源:cnblogs  作者:程序员三时  时间:2023/6/2 10:52:54  对本文有异议

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

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

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

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

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

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

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

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

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

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

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

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

公共错误异常类

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

  1. /**
  2. * @author 公众号 程序员三时
  3. * @version 1.0
  4. * @date 2023/4/29 00:15
  5. * @webSite https://github.com/coder-amiao
  6. * 通用业务异常封装
  7. */
  8. @Data
  9. public class BusinessException extends RuntimeException {
  10. /**
  11. * 自定义异常编码
  12. */
  13. private String code;
  14. public BusinessException(String code, String message) {
  15. super(message);
  16. this.code = code;
  17. }
  18. public BusinessException(ResultCode resultCodeEnum) {
  19. super(resultCodeEnum.getMessage());
  20. this.code = resultCodeEnum.getCode();
  21. }
  22. public BusinessException(ResultCode resultCodeEnum, String msg) {
  23. super(resultCodeEnum.getMessage() +" " +msg);
  24. this.code = resultCodeEnum.getCode();
  25. }
  26. }

其他异常类也是如此

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

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

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

日志配置文件

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  3. <contextName>shop-api</contextName>
  4. <!--定义日志文件的存储地址 从springboot配置文件中获取路径-->
  5. <springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
  6. <!--springboot配置文件中获取日志级别-->
  7. <springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
  8. <!-- <property name="log.path" value="log" />-->
  9. <property name="log.maxHistory" value="90" />
  10. <property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %yellow(%thread) %green(%logger) %msg%n"/>
  11. <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %logger %msg%n"/>
  12. <!--输出到控制台-->
  13. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  14. <encoder>
  15. <pattern>${log.colorPattern}</pattern>
  16. </encoder>
  17. </appender>
  18. <!--输出到文件-->
  19. <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
  20. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  21. <fileNamePattern>${LOG_PATH}/info/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
  22. <maxFileSize>3MB</maxFileSize>
  23. <maxHistory>30</maxHistory>
  24. <totalSizeCap>1GB</totalSizeCap>
  25. </rollingPolicy>
  26. <encoder>
  27. <pattern>${log.pattern}</pattern>
  28. </encoder>
  29. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  30. <level>INFO</level>
  31. <onMatch>ACCEPT</onMatch>
  32. <onMismatch>DENY</onMismatch>
  33. </filter>
  34. </appender>
  35. <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
  36. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  37. <fileNamePattern>${LOG_PATH}/error/error.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
  38. <maxFileSize>3MB</maxFileSize>
  39. <maxHistory>30</maxHistory>
  40. <totalSizeCap>1GB</totalSizeCap>
  41. </rollingPolicy>
  42. <encoder>
  43. <pattern>${log.pattern}</pattern>
  44. </encoder>
  45. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  46. <level>ERROR</level>
  47. <onMatch>ACCEPT</onMatch>
  48. <onMismatch>DENY</onMismatch>
  49. </filter>
  50. </appender>
  51. <root level="debug">
  52. <appender-ref ref="console" />
  53. </root>
  54. <root level="info">
  55. <appender-ref ref="file_info" />
  56. <appender-ref ref="file_error" />
  57. </root>
  58. </configuration>

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

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

原文链接:https://www.cnblogs.com/kenx/p/17445490.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号