快捷搜索:  汽车  科技

springboot使用同步代码块(boot使用logback实现多环境配置)

springboot使用同步代码块(boot使用logback实现多环境配置)注意:环境配置,dev开发环境和部署环境连接的数据库地址、debug模式等等都是不同的,为了区分dev开发环境配置和生产环境配置,可以创建两个yml文件,什么环境使用相应的配置文件:引入logback所需要的依赖<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic<

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

目录
  1. 前言
  2. 引入依赖
  3. 配置项值方案
  4. 外部配置文件方案
  5. springProfile方案
  6. 总结
前言

上一篇文章中老顾介绍了logback基本配置,了解了日志配置的基本方式。我们平时在系统开发时,开发环境与生产环境的日志配置会不一样;那今天老顾就跟大家介绍一下如何实现多环境配置。

Logback是由log4j创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core logback- classic和logback-accesslogback-core是其它两个模块的基础模块,logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能

引入依赖

引入logback所需要的依赖

<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.18</version> </dependency>

如果使用spring-boot,兼容logback,默认已经集成了这些文件,所以就不需要自己依赖注入了,直接在项目中使用就行了。

配置项值方案

利用Spring boot中application.yml的spring.profiles.active

springboot使用同步代码块(boot使用logback实现多环境配置)(1)

环境配置,dev开发环境和部署环境连接的数据库地址、debug模式等等都是不同的,为了区分dev开发环境配置和生产环境配置,可以创建两个yml文件,什么环境使用相应的配置文件:

  • application.yml:公共配置文件,里面可以通过spring.profiles.active=dev来指定使用哪个配置文件
  • application-dev.yml:开发环境配置文件
  • application-prod.yml:生产环境配置文件

注意:

1、当公共配置文件application.yml和dev.yml(或prod.yml)同时存在同一个配置的时候,以dev.yml(prod.yml)配置文件为主

2、当配置项只在公共application.yml文件中有的时候,以公共配置为主

3、可以把公共配置项放到application.yml中

我们在看dev.xml和prod.xml配置文件

dev.xml配置

#dev.xml中的配置,用户开发环境 log: path: /Users/gujiachun/Downloads level: debug

prod.xml配置

#prod.xml中的配置,用户生产环境 log: path: /Users/gujiachun/Downloads level: info

此方案的设计原理就是,不同环境不同的配置值;然后在logback-spring.xml中使用此配置值。

springboot使用同步代码块(boot使用logback实现多环境配置)(2)

上图就是logback-spring.xml配置,里面有个重要的就是springProperty标签,可以利用这个标签引用到application.yml中的值(包含dev.xml、prod.xml);log.level和log.path的值就可以在logback-spring.xml中使用,使用方式${logPath}、${logLevel}

测试代码

springboot使用同步代码块(boot使用logback实现多环境配置)(3)

启动测试,指定spring.profiles.active=dev或prod;我们发现在logPath目录出现对应的日志文件

springboot使用同步代码块(boot使用logback实现多环境配置)(4)

因为不同的环境,我们配置成日志级别不一样,dev对应debug,prod对应info;日志文件内容不同环境对应不同内容

dev环境输出

2020-01-04 10:01:50 298 -- debug... 2020-01-04 10:01:50 298 -- info... 2020-01-04 10:01:50 298 -- error...

prod环境输出

2020-01-04 10:03:55 198 -- info... 2020-01-04 10:03:55 198 -- error...外部配置文件方案

另一种更简单的方式,可以利用logging.config指定配置文件,而且有一个好处可以不一定要取名logback-spring.xml;我们来看一下

application-dev.xml环境

#日志相关配置 logging: config: classpath:conf/logback-dev.xml

application-prod环境

#日志相关配置 logging: config: classpath:conf/logback-prd.xml

logback-dev.xml配置

springboot使用同步代码块(boot使用logback实现多环境配置)(5)

springboot使用同步代码块(boot使用logback实现多环境配置)(6)

logback-prod.xml配置

springboot使用同步代码块(boot使用logback实现多环境配置)(7)

springboot使用同步代码块(boot使用logback实现多环境配置)(8)

springboot使用同步代码块(boot使用logback实现多环境配置)(9)

springboot使用同步代码块(boot使用logback实现多环境配置)(10)

springboot使用同步代码块(boot使用logback实现多环境配置)(11)

springboot使用同步代码块(boot使用logback实现多环境配置)(12)

springboot使用同步代码块(boot使用logback实现多环境配置)(13)

启动指定spring.profiles.active=dev

在控制台输出了

springboot使用同步代码块(boot使用logback实现多环境配置)(14)

而在日志文件

springboot使用同步代码块(boot使用logback实现多环境配置)(15)

日志内容

2020-01-04 11:56:10 DEBUG 7454 --- [main] c.r.g.t.LoggerTest : debug:....

为什么只有debug日志,没有info、error;这个是因为日志文件中加了个过滤器

<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>${logLevel}</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>

此过滤器中的属性onMatch和onMismatch,匹配日志级别就接受,不匹配就不接受。所以只接受debug级别。

启动指定spring.profiles.active=prod

控制台输出

springboot使用同步代码块(boot使用logback实现多环境配置)(16)

日志文件

springboot使用同步代码块(boot使用logback实现多环境配置)(17)

生成了4个文件,也是因为过滤器,生产环境的日志级别为info,所以debug日志文件里面为空。

springProfile方案

springProfile标签在logback.xml中可以起到区分不同环境分支;如果我们需要配置不同环境,不同的输出方式,如:dev环境输出到控制台以及文件,prod环境只要输出到文件。

logback-spring.xml配置

springboot使用同步代码块(boot使用logback实现多环境配置)(18)

这样就可以在同一个配置xml文件中,配置不同的环境值。

总结

上面介绍了几个方案,小伙伴们可以选择适合自己业务的方案,下一篇老顾介绍日志在集群中的方式。谢谢!!!

---End---


最近老顾上传了微服务网关的分享课程,请大家多多支持

推荐阅读

1基于RocketMq的SpringCloud Stream框架实战入门

2、如何搭建消息中间件应用框架之SpringCloud Stream

3面试必备:网关异常了怎么办?如何做全局异常处理?

4Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则

5Gateway网关系列开篇:SpringCloud的官方网关Gateway介绍

6API网关在微服务架构中的应用,这一篇就够了

7学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)

8Lambda用在哪里?几种场景?

9、为什么会出现Lambda表达式,你知道吗?

10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用

11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构

12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足

13、阿里P7二面:聊聊零拷贝的原理

14、秒杀系统的核心点都在这里,快来取

15、你了解如何利用token方式实现分布式Session吗?

16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂

17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调

18、企业实战Redis全方面思考,你思考了吗?

19、面试题:Thread的start和run的区别

20、面试题:什么是CAS?CAS的作用以及缺点

21、如何访问redis中的海量数据?避免事故产生

22、如何解决Redis热点问题?以及如何发现热点?

23、如何设计API接口,实现统一格式返回?

24、你真的知道在生产环境下如何部署tomcat吗?

25、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

26、分享大厂分布式唯一ID设计方案,快来围观

27、你想了解一线大厂的分布式唯一ID生成方案吗?

28、你知道如何处理大数据量吗?(数据拆分篇)

29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

31、你了解大型网站的页面静态化吗?

32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

33、你知道怎么解决DB读写分离,导致数据不一致问题吗?

34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

35、你真的知道怎么使用缓存吗?

36、如何利用锁,防止缓存击穿?重构思想的重要性

37、海量订单产生的业务高峰期,如何避免消息的重复消费?

38、你知道如何保障生产端100%消息投递成功吗?

39、微服务下的分布式session该如何管理?

40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招

41、互联网架构重要组员CDN,很多高级开发都没有实操过,来看这里

42、阿里二面:CDN缓存控制原理,看看能不能难住你

43、SpringCloud Alibaba之Nacos多环境多项目管理

44、SpringCloud Alibaba系列之Nacos配置中心玩法

45、SpringCloud Alibaba之Nacos注册中心

46、SpringCloud Plus版本之SpringCloud Alibaba

47、SpringCloud Alibaba之Nacos集群、持久化

48、SpringCloud Alibaba之Nacos共享配置、灰度配置

49、SpringCloud Alibaba之Sentinel工作原理

50、SpringCloud Alibaba之Sentinel流控管理

51、SpringCloud Alibaba之Sentinel降级管理

52、SpringCloud Alibaba之Sentinel热点参数限流

53、SpringCloud Alibaba之Sentinel的API实战

猜您喜欢: