logback可以通过:
LoggerContext lc = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory();获取到LoggerContext 上下文动态修改配置,例子(动态添加一个Appender):
package com.wjj.application.config; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core.Appender; import org.slf4j.impl.StaticLoggerBinder; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import java.util.Arrays; /** * es 数据初始化Runner * @author hank */ @Component public class LogAppenderInit implements ApplicationRunner { @Value(" %level\\n%m\\n%logger\\n%ex{12}") private String pattern; /** * 当前环境,默认prod */ @Value("${spring.profiles.active:${env:null}}") private String springProfilesActive; @Override public void run(ApplicationArguments args) throws Exception { if(!Arrays.asList("prod").contains(springProfilesActive)) { System.out.println("LogAppenderInit start ---"); try { LoggerContext lc = (LoggerContext) StaticLoggerBinder.getSingleton().getLoggerFactory(); LogDingDingAppender ca = new LogDingDingAppender(); ca.setContext(lc); ca.setName("LogDingDingAppender"); ca.setPattern(springProfilesActive + pattern); ca.setDingdingToken("be35422d81da90c5631e74d445bf9562fd53e83874c08d0e305e816f524f18cc"); ca.setExcludeThrowableClasses("com.wjj.application.exception.CommonException,com.wjj.application.exception.ServiceException,com.wjj.application.exception.ControllerException"); ca.setLevel(Level.ERROR.levelStr); ca.setSecret("SEC6dc8c7a931a1f5cd257494ad9865a082e3cb4609145a146864eeecc1b3f8b6a8"); // LayoutWrappingEncoder<ILoggingEvent> encoder = new LayoutWrappingEncoder<ILoggingEvent>(); // encoder.setContext(lc); // same as // PatternLayout layout = new PatternLayout(); // layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); // TTLLLayout layout = new TTLLLayout(); // // layout.setContext(lc); // layout.start(); // encoder.setLayout(layout); // ca.setEncoder(encoder); ca.start(); Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.addAppender((Appender) ca); System.out.println("LogAppenderInit end ---"); } catch (Exception e) { System.out.println("LogAppenderInit error --- , eMsg:" + e.getMessage()); } } } }