-
Notifications
You must be signed in to change notification settings - Fork 59
Open
Labels
Description
场景
公司有个给客户定制的项目,有个需求是:项目中常见的配置,需要全部迁移到客户内部的 “配置中心”,然后项目启动的时候,动态从“配置中心”拉去配置,初始化:数据源、日志路径等。
项目运行环境:
- 项目框架: Springboot
- 运行容器: 以war包的形式,在tomcat容器下运行;
对于数据源来说,配置相对容易,但是在动态配置logback日志打印路径时,遇到一些问题,最终使用下面比较轻量的方式解决:
解决方法
1、创建 PropertyDefinerBase 类
import ch.qos.logback.core.PropertyDefinerBase;
import org.springframework.stereotype.Component;
@Component
public class LogDirConfig extends PropertyDefinerBase {
//从客户的配置中心获取日志路径
@Value("${XXXX.XXXX.logDir}")
private String dirName;
@Override
public String getPropertyValue() {
return dirName;
}
}2、修改logback配置文件
<configuration scan="true" scanPeriod="10 seconds">
<include resource="org/springframework/boot/logging/logback/base.xml" />
<define name="log.dir" class="com.config.LogDirConfig" />
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.dir}/info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.dir}/info-%d{yyyyMMdd}.%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>2048MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>180</maxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}%line -%msg%n
</Pattern>
</layout>
</appender>
...
3、修改application.properties
#日志设置
logging.config=classpath:logback-spring.xml