摘要
最近开发过程中,使用Spring Profiles进行了开发环境与测试环境的分离,由于开发环境和测试环境之间需要使用不同的配置,例如开发环境和测试环境的日志级别,日志文件存储的路径极有可能是不同的,所以需要将开发环境和测试环境分离开来,我们首先想到的可能是把logback.xml文件拷贝成两份,不同环境使用不同的logback.xml文件不就可以了吗?其实这样是有问题的,一个是两个logback.xml文件进行管理是很头疼的,另一个很重要的问题是logback.xml文件会在web.xml文件里面配置,而web.xml文件很难去判断读取哪一个logback.xml文件。
解决方案
我们使用logback的一个特性,它提供<property resource=''>
来读取我们的配置文件,我们只需要在resource里面配置好我们对应logback.properties的文件路径就可以了,例如这些:
<property resource="properties/${spring.profiles.active}/logback.properties"/>
这样我们直接使用${spring.profiles.active}来获取对应环境的目录就可以了,非常方便。
实现代码
具体的实现代码如下:
- logback.xml基础配置:
下面这段配置中主要配置的含义可以通过查看logback文档去了解,不做过多的阐述,有两个地方可以相应了解下,一个是日志写入文件时,会同时按照日期和最大文件大小生存新文件,另一个是statusListener和debug=’false’可以不打印logback自身的日志信息。除了${spring.profiles.active}
,其他的${}
包裹的变量都是从logback.properties文件中进行读取的,所以我们需要在开发环境和生产环境分别定义一套logback.properties文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration scan="true" debug="false">
<property resource="properties/${spring.profiles.active}/logback.properties"/>
<!-- 清除logback状态日志 -->
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />