根据环境变量切换logback配置

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

一.加入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配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值