Springboot如何使用logback实现多环境配置?
前言
Logback是由log4j创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core,logback- classic和logback-access。logback-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
环境配置,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中使用此配置值。
上图就是logback-spring.xml配置,里面有个重要的就是springProperty标签,可以利用这个标签引用到application.yml中的值(包含dev.xml、prod.xml);log.level和log.path的值就可以在logback-spring.xml中使用,使用方式 l o g P a t h 、 {logPath}、 logPath、{logLevel}。
测试代码
启动测试,指定spring.profiles.active=dev或prod;我们发现在logPath目录出现对应的日志文件
因为不同的环境,我们配置成日志级别不一样,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配置
logback-prod.xml配置
启动指定spring.profiles.active=dev
在控制台输出了
而在日志文件
日志内容
2020-01-04 11:56:10 [39mDEBUG[0;39m 7454 --- [main] [36mc.r.g.t.LoggerTest[0;39m : 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
控制台输出
日志文件
生成了4个文件,也是因为过滤器,生产环境的日志级别为info,所以debug日志文件里面为空。
springProfile方案
springProfile标签在logback.xml中可以起到区分不同环境分支;如果我们需要配置不同环境,不同的输出方式,如:dev环境输出到控制台以及文件,prod环境只要输出到文件。
logback-spring.xml配置
这样就可以在同一个配置xml文件中,配置不同的环境值。
总结
上面介绍了几个方案,小伙伴们可以选择适合自己业务的方案,下一篇老顾介绍日志在集群中的方式。谢谢!!!
到此这篇关于Springboot如何使用logback实现多环境配置?的文章就介绍到这了,更多相关logback实现多环境配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!