log4j: какой файл конфигурации был использован? - PullRequest
19 голосов
/ 07 апреля 2011

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

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

Спасибо.

Ответы [ 2 ]

25 голосов
/ 16 апреля 2011

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

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

log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@11b86e7.
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 голосов
/ 02 июня 2014

Вы можете использовать тот же процесс, что и 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;
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...