Blog icon indicating copy to clipboard operation
Blog copied to clipboard

Springboot系列之—动态配置logback路径

Open johnnian opened this issue 6 years ago • 6 comments

场景

公司有个给客户定制的项目,有个需求是:项目中常见的配置,需要全部迁移到客户内部的 “配置中心”,然后项目启动的时候,动态从“配置中心”拉去配置,初始化:数据源、日志路径等。

项目运行环境:

  • 项目框架: 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

johnnian avatar Mar 28 '19 02:03 johnnian

请问这个可以在项目启动后进行动态修改日志目录吗

xkcoding avatar Sep 23 '19 09:09 xkcoding

请问这个可以在项目启动后进行动态修改日志目录吗

没试过,应该是可行的,您可以参考下:

johnnian avatar Sep 23 '19 15:09 johnnian

这个是在启动的时候注入的,后续好像修改不了了

xkcoding avatar Sep 24 '19 01:09 xkcoding

使用@Value 是需要重启的,需要手动设置environment才行

ShawshankLin avatar Nov 06 '19 15:11 ShawshankLin

请问这个可以在项目启动后进行动态修改日志目录吗

可以吗?

git10135405 avatar Apr 01 '20 12:04 git10135405

打成Jar包就不行了

natezhengbne avatar Jul 07 '20 00:07 natezhengbne