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;
/**
* 增加一个钉钉机器人日志推送appender
* @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("DingToken");
ca.setExcludeThrowableClasses("com.wjj.application.exception.CommonException,com.wjj.application.exception.ServiceException,com.wjj.application.exception.ControllerException");
ca.setLevel(Level.ERROR.levelStr);
ca.setSecret("DingSecret");
// 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());
}
}
}
}