2011-04-07 3 views
16

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

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

Спасибо.

ответ

21

Боюсь, у вас нет шансов получить автоматически выбранный путь из 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. Имейте в виду другие инициализации и внешние конфигурации, например. от Весны 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; 
    } 
    } 
Смежные вопросы