spring boot中通过代码切换logback多环境日志配置

发布于 2022-09-06 02:18:29 字数 700 浏览 16 评论 0

可以静态地为logback准备多种环境配置。在使用时可以根据运行环境指定一种。
那么在程序运行时,如何通过代码动态地切换其环境配置。

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev, staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

比如如上的定义。应用启动时,指定激活的profile为dev,在代码中想某个时候使用staging的配置。是否有方法可以被用来改变logback的配置。
是否可以改profile.active的值来让logback配置变化?这样对其他的环境有影响的吧?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

記柔刀 2022-09-13 02:18:29
public class WebApplication {

  public static void main(String[] args) {
    ApplicationContextInitializer<ConfigurableApplicationContext> aci = new ApplicationContextInitializer<ConfigurableApplicationContext>() {
      public void initialize(ConfigurableApplicationContext appContext) {
        try {
         
          LogbackConfigurationSwitch.switchMode(Mode.DEFAULT);

        } catch (Exception e) {
          e.printStackTrace();

          int exitValue = SpringApplication.exit(appContext);
          System.exit(exitValue);
        }
      }
    };

    new SpringApplicationBuilder(WebApplication.class).initializers(aci).run(args);
  }
}

public class LogbackConfigurationSwitch {

  public static enum Mode {
    DEFAULT("logback"), //
    ITB("logback-dev"), //
    NOITB("logback-prod"); //

    private String resourceName;

    private Mode(String resourceName) {
      this.resourceName = '/' + resourceName + ".xml";
    }

    public URL getXmlResource() throws FileNotFoundException {
      URL resource = LogbackConfigurationSwitch.class.getResource(resourceName);
      if (resource != null) {
        return resource;
      }
      throw new FileNotFoundException("resource not found!");
    }
  }

  public static void switchMode(Mode mode) throws FileNotFoundException, JoranException {
    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
    context.reset();

    JoranConfigurator configurator = new JoranConfigurator();
    configurator.setContext(context);
    URL configUrl = mode.getXmlResource();
    // 重新设定logbock的配置
    configurator.doConfigure(configUrl);
  }
}
醉态萌生 2022-09-13 02:18:29

发个文档你看下吧:http://www.roncoo.com/article...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文