Skip to content

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

Description

@johnnian

场景

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

项目运行环境:

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions