Подтвердить что ты не робот

Log4j: какой файл конфигурации использовался?

Используя log4j, как я могу узнать, что такое имя и путь текущего файла DOMConfigurator, log4j.xml используется для reset имени файла с помощью метода PropertyConfigurator.configureAndWatch, которому необходимо имя и путь этого файл, чтобы увидеть, изменилось ли оно.

В документе API показано, как настроить log4j для перезагрузки конфигурации, но я не могу найти способ увидеть имя файла и путь, который он взял автоматически. Приложение работает автономно с любым сервером приложений.

Спасибо.

4b9b3361

Ответ 1

Я боюсь, что у вас нет шансов получить автоматически выбранный путь из API. Поскольку я понимаю исходный код log4j, обнаруженный путь будет использоваться и не будет сохранен.

По крайней мере, вы можете использовать свойство -Dlog4j.debug для вывода log4j-внутренней отладочной информации при запуске, и вы получите некоторую информацию:

log4j: Trying to find [log4j.xml] using context classloader [email protected]
log4j: Using URL [file:/C:/develop/workspace/foobar/target/classes/log4j.xml] for automatic log4j configuration.
log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator

Строка 'log4j: Using URL ...' поступает из класса LogManager. Здесь вы можете проверить процесс инициализации. Поскольку я вижу, что URL-адрес не будет сохранен для более поздней информации.

Ответ 2

Вы можете использовать тот же процесс, что и log4j, для статической инициализации в классе LogManager. Имейте в виду другие инициализации и внешние конфигурации, например. от Spring org.springframework.web.util.Log4jConfigListener.

  public static URL getLog4jConfig() {
    String override = OptionConverter.getSystemProperty("log4j.defaultInitOverride", null);
    if (override == null || "false".equalsIgnoreCase(override)) {
      String configurationOptionStr = OptionConverter.getSystemProperty("log4j.configuration", null);

      URL url;

      if (configurationOptionStr == null) {
        url = Loader.getResource("log4j.xml");
        if (url == null) {
          url = Loader.getResource("log4j.properties");
        }
      } else {
        try {
          url = new URL(configurationOptionStr);
        } catch (MalformedURLException ex) {
          url = Loader.getResource(configurationOptionStr);
        }
      }
      return url;
    } else {
      return null;
    }
  }