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来访问日记的功能

Posted in Java/Android onJune 16, 2021

引入依赖

引入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如何使用logback实现多环境配置?

环境配置,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如何使用logback实现多环境配置?

上图就是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}

测试代码

Springboot如何使用logback实现多环境配置?

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

Springboot如何使用logback实现多环境配置?

因为不同的环境,我们配置成日志级别不一样,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如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

logback-prod.xml配置

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

Springboot如何使用logback实现多环境配置?

启动指定spring.profiles.active=dev

在控制台输出了

Springboot如何使用logback实现多环境配置?

而在日志文件

Springboot如何使用logback实现多环境配置?

日志内容

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

控制台输出

Springboot如何使用logback实现多环境配置?

日志文件

Springboot如何使用logback实现多环境配置?

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

springProfile方案

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

logback-spring.xml配置

Springboot如何使用logback实现多环境配置?

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

总结

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

到此这篇关于Springboot如何使用logback实现多环境配置?的文章就介绍到这了,更多相关logback实现多环境配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
Jackson 反序列化时实现大小写不敏感设置
Jun 29 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java结构型设计模式之组合模式详解
Sep 23 Java/Android
解决tk mapper 通用mapper的bug问题
一篇带你入门Java垃圾回收器
Java实现简易的分词器功能
Java用自带的Image IO给图片添加水印
java Nio使用NioSocket客户端与服务端交互实现方式
JVM入门之类加载与字节码技术(类加载与类的加载器)
Spring Cache和EhCache实现缓存管理方式
You might like
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php blowfish加密解密算法
2016/07/02 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
js不是基础的基础
2006/12/24 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python中去空格函数的用法
2014/08/21 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python 追踪except信息方式
2020/04/25 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
全球度假村:Club Med
2017/11/27 全球购物
致跳高运动员加油稿
2014/02/12 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
刑事和解协议书范本
2014/11/19 职场文书
工程移交协议书
2016/03/24 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书