Log4j: какой файл конфигурации использовался?
Используя log4j, как я могу узнать, что такое имя и путь текущего файла DOMConfigurator, log4j.xml используется для reset имени файла с помощью метода PropertyConfigurator.configureAndWatch, которому необходимо имя и путь этого файл, чтобы увидеть, изменилось ли оно.
В документе API показано, как настроить log4j для перезагрузки конфигурации, но я не могу найти способ увидеть имя файла и путь, который он взял автоматически.
Приложение работает автономно с любым сервером приложений.
Спасибо.
Ответы
Ответ 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;
}
}