Как настроить конфигурацию log4j2 для использования с внешнего jar? - PullRequest
0 голосов
/ 30 октября 2019

Я создал файл журнала с пользовательским ConfigurationFactory и для переопределения элементов из файла конфигурации XML, который находится в том же банке (файл log4j2.xml). У меня есть другой файл (log4j2-prod.xml), который должен быть переопределен, и его конфигурация должна использоваться в производственных средах. Как можно условно установить, какую конфигурацию следует использовать log4j2?

пример моей фабрики пользовательских настроек:

@Plugin(
    name = "CustomConfigurationFactory",
    category = ConfigurationFactory.CATEGORY)

@Order(50)
public class CustomConfigFactory extends ConfigurationFactory {

  @Override
  protected String[] getSupportedTypes() {
      return new String[] {".xml"};
  }

  @Override
  public Configuration getConfiguration(LoggerContext loggerContext, 
    ConfigurationSource source) {
      if(source.getLocation().contains("log4j2.xml")) {
        return null;
    } else {
        return new CustomXmlConfig(loggerContext, source);
    }
}

public class CustomXmlConfig extends XmlConfiguration {

    public CustomXmlConfig(LoggerContext loggerContext, ConfigurationSource configSource) {
        super(loggerContext, configSource);
    }

    @Override
    protected void doConfigure() {
        if (this.getName().contains("log4j2.xml")) {
            final InputStream systemResourceAsStream = ClassLoader.getSystemResourceAsStream("config/application.yaml");
            String substring1 = null;
            try {
                final String s = IOUtils.toString(systemResourceAsStream, StandardCharsets.UTF_8.name());
                int startIndex = s.indexOf("logger.package-name:");
                final String substring = s.substring(startIndex + "logger.package-name:".length() + 1);
                substring1 = substring.substring(0, substring.indexOf('\n')).trim();
                System.out.println(substring1);
            } catch (IOException e) {
                e.printStackTrace();
            }
            MDC.put("tenantId", "tenant1234");
            MDC.put("taskId", "task123");
            if(getRootNode().getChildren() != null) {
                getRootNode().getChildren().get(0).getChildren().get(0).setValue(pattern);
                getRootNode().getChildren().get(2).getChildren().get(0).getAttributes().put("name", substring1);
            }
        }
        super.doConfigure();
    }
}

}

...