Перезагрузить журнал котов во время выполнения?

В настоящее время мы используем Tomcat 7 с одной конфигурацией журнала, указанной с помощью -Djava.util.logging.config.file и классом по умолчанию ClassLoaderLogManager с -Djava.util.logging.manager = "org.apache.juli.ClassLoaderLogManager". Это прекрасно работает для одноразового запуска конфигурации.

У нас есть несколько сервлетов и другой код, который работает вне контекста сервлета. Мы работаем на выделенном сервере Tomcat, которым мы полностью контролируем, и мы хотим, чтобы весь код использовал одну и ту же конфигурацию журнала. Мы используем API java.util.logging для ведения журнала. Это означает, что LogManager.getLogManager (). GetLogger (name) должен работать, а Logger.isLoggable (Level) должен работать.

ClassLoaderLogManager, кажется, ориентирован на противоположность нашей ситуации: позволяет сервлетам указывать индивидуальные настройки журнала. Мы хотим, чтобы все журналы контролировались в одном месте. Но мыделать хочу другие преимущества JULI, такие как улучшенные FileHandlers.

Теперь вопрос: как я могуперезагружать эти настройки из файла во время выполнения без перезагрузки приложения?

Что я пробовал:

LogManager.getLogManger.readConfiguration (): приводит к эффективному NOOP в ClassLoaderLogManager, потому что Thread.currentThread.getContextClassLoader () не является системным загрузчиком классов.Явно устанавливая Thread.setContextClassLoader (ClassLoader.getSystemClassLoader ()) и затем вызывая выше. Это действительно прочитало файл конфигурации (пошагово пройденный в отладчике), но не распространило изменения до существующих регистраторов в содержащихся ClassLoaders. Logger.setLevel () никогда не вызывался на существующих регистраторах.также вызывает reset () до того, как эти вызовы ничего не изменят.JMX, по-видимому, предоставляет регистраторы только для одного ClassLoader (возможно, системного ClassLoader)

Ответы на вопрос(2)

Ваш ответ на вопрос