Blog
                                
                                 Blog copied to clipboard
                                
                                    Blog copied to clipboard
                            
                            
                            
                        Springboot系列之—动态配置logback路径
场景
公司有个给客户定制的项目,有个需求是:项目中常见的配置,需要全部迁移到客户内部的 “配置中心”,然后项目启动的时候,动态从“配置中心”拉去配置,初始化:数据源、日志路径等。
项目运行环境:
- 项目框架: 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
请问这个可以在项目启动后进行动态修改日志目录吗
请问这个可以在项目启动后进行动态修改日志目录吗
没试过,应该是可行的,您可以参考下:
这个是在启动的时候注入的,后续好像修改不了了
使用@Value 是需要重启的,需要手动设置environment才行
请问这个可以在项目启动后进行动态修改日志目录吗
可以吗?
打成Jar包就不行了