Перезагрузить журнал котов во время выполнения?
В настоящее время мы используем 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)