一.加入janino依赖
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.6</version>
</dependency>
二.代码配置
1.创建一个LoggerStartupListener去设置环境变量
package com.xx.log;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.LoggerContextListener;
import ch.qos.logback.core.Context;
import ch.qos.logback.core.spi.ContextAwareBase;
import ch.qos.logback.core.spi.LifeCycle;
import org.apache.commons.lang.StringUtils;
/**
* Created by andrew.huang on 2018/11/20.
*/
public class LoggerStartupListener extends ContextAwareBase implements LoggerContextListener, LifeCycle {
private boolean isStarted = false;
@Override
public void start() {
if(isStarted){
return;
}
String profile = System.getenv("ACTIVE_PROFILE");
if(StringUtils.isEmpty(profile)){
profile = ”PRODUCTION“;
}
Context context = getContext();
context.putProperty("ACTIVE_PROFILE", profile);
isStarted = true;
}
@Override
public void onStart(LoggerContext context) {
}
@Override
public boolean isResetResistant() {
return true;
}
@Override
public void onReset(LoggerContext context) {
}
@Override
public void onStop(LoggerContext context) {
}
@Override
public void onLevelChange(Logger logger, Level level) {
}
@Override
public void stop() {
}
@Override
public boolean isStarted() {
return isStarted;
}
}
2.在logback配置文件配置condition
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="log.charset" value="UTF-8" />
<property name="job.name" value="xx-job" />
<property name="log.path" value="/apps/logs/log_receiver" />
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %p [%t] %c %M %m %xEx%n" />
<contextListener class="com.xx.log.LoggerStartupListener"/>
<activeProfile>${ACTIVE_PROFILE}</activeProfile>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="${log.charset}">
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder charset="${log.charset}">
<pattern>${log.pattern}</pattern>
</encoder>
<file>${log.path}/${job.name}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/${job.name}.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
</rollingPolicy>
</appender>
<appender name="Async" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="RollingFile" />
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
</appender>
<logger name="org" level="ERROR" />
<root level="INFO">
<appender-ref ref="Async" />
<if condition = '!property("ACTIVE_PROFILE").equalsIgnoreCase("PRODUCTION")'>
<then>
<appender-ref ref="Console" />
</then>
</if>
</root>
</configuration>
三.配置环境变量
配置环境ACTIVE_PROFILE为不同值,对应不同环境的logback配置

本文介绍了如何根据环境变量切换logback配置。通过引入janino依赖,创建LoggerStartupListener来设置环境变量,并在logback配置文件中使用condition判断,实现不同环境的配置切换。同时,需要设置环境变量ACTIVE_PROFILE来指定不同环境的logback配置。

1952

被折叠的 条评论
为什么被折叠?



