springboot将日志得一些配置放到apollo配置中心
程序员文章站
2022-07-12 11:51:34
...
在正式项目中我们一般不同环境下配置不一样,不同项目下日志配置级别也不一样或者名称也不一样这个时候就需要定义一些变量
那么如何把变量放到配置中心去呢?
有人会说直接放上去不就好了。好,当你直接放上去得时候你会发现你得启动日志全不见了,或者变量也不见了
这是因为springboot 加载logback 时间早与加载 apollo拉取配置。
知道问题得症结所在我们就可以对症下药了。
肯定是要让apollo拉取配置时间早与 logback 得加载。怎么做到呢?
一、可以在入口函数application.main 先初始化运行apollo客户端
@SpringBootApplication(exclude = {FreeMarkerAutoConfiguration.class})
@EnableEurekaClient
@EnableApolloConfig
public class ServiceDemoApplication {
public static void main(String[] args){
Config config = ConfigService.getAppConfig();
final String LOG_PATH="logging.path";
final String PROFILES_ACTIVE="spring.profiles.active";
final String LOG_NAME="logging.name";
final String APPLICATION_NAME="spring.application.name";
System.setProperty(PROFILES_ACTIVE,config.getProperty(PROFILES_ACTIVE, "prod"));
System.setProperty(LOG_PATH,config.getProperty(LOG_PATH, "/logs"));
System.setProperty(LOG_NAME,config.getProperty(APPLICATION_NAME, "UNDEFINED"));
SpringApplication.run(ServiceDemoApplication.class, args);
}
}
二、可以将logback-spring.xml改个名字,logback-xxx.xml 然后在配置中心指定logging.config=classpath:logback-xxx.xml
这样也可以让配置中心加载早与日志配置加载。
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<SpringProperty scope="context" name="logPath" source="logging.path"/>
<SpringProperty scope="context" name="logName" source="logging.name"/>
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!--按天生成日志-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>
${logPath}/${logName}-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="org.springframework.boot" level="debug" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</logger>
<logger name="root" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="logFile" />
</logger>
</springProfile>
<springProfile name="prod">
<!--按天生成日志-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>
${logPath}/${logName}-%d{yyyy-MM-dd}.%i.log
</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>15</MaxHistory>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="root" level="error" additivity="false">
<appender-ref ref="logFile" />
</logger>
<logger name="org.springframework.boot" level="error" additivity="false">
<appender-ref ref="logFile" />
</logger>
</springProfile>
</configuration>
上一篇: postman的一些认识