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

В настоящее время мы используем 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 () isn 'т системный загрузчик классов.Явно устанавливая Thread.setContextClassLoader (ClassLoader.getSystemClassLoader ()) и затем вызывая выше. Это действительно прочитало конфигурационный файл (пошаговый в отладчике), но это неРаспространить изменения вниз на существующие регистраторы в содержащихся ClassLoaders. Logger.setLevel () никогда не вызывался на существующих регистраторах.также вызывает reset () до того, как эти вызовы некажется, ничего не меняет.JMX, по-видимому, предоставляет регистраторы только для одного ClassLoader (возможно, системного ClassLoader)

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

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