2016-07-13 4 views
2

У меня есть файл logging.properties, что я загрузить во время выполнения в моей Java-приложение:Java WebStart заменяет мой протоколирования форматировщик

final InputStream logFileInputStream= this.getClass().getResourceAsStream("mylogging.properties"); 
LogManager.getLogManager().readConfiguration(logFileInputStream); 

Этот logging.properties файл определяет нестандартный форматировщик:

.level = INFO 
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler 
java.util.logging.ConsoleHandler.formatter = mycustom.logging.OneLineFormatter 
java.util.logging.ConsoleHandler.level = FINEST 
java.util.logging.FileHandler.pattern = ./logs/blubb.%g.log 
java.util.logging.FileHandler.count = 31 
java.util.logging.FileHandler.formatter = mycustom.logging.OneLineFormatter 
java.util.logging.FileHandler.level = FINEST 

Это хорошо работает при запуске из командной строки. Однако при запуске приложения с Java Webstart форматы заменяются SimpleFormatter для ConsoleHandler и XMLFormat для FileHandler. Данные logging.properties все еще читаются, например, соблюдается шаблон имен файлов журналов.

Как я могу избежать использования Webstart для замены моих форматировщиков ?!

+0

Все ли классы включены в банку? Все ли необходимые банки с этими регистрационными классами в вашем jnlp? –

+0

@StefanHegny Да. Этот пользовательский Formatter находится в дополнительной банке, которая включена в JNLP. – radlan

+0

Хм, что-нибудь подозрительное в консоли java, когда вы запускаете jnlp? Поскольку вы, похоже, уверены, что он забирает файл свойств, вы должны, возможно, снова проверить jars/jnlp, возможно, добавить их в вопрос. –

ответ

0

LogManager.readConfiguration требуется LoggingPermission("control") при работе под управлением безопасности. По умолчанию WebStart запускается под управлением безопасности, а консоли - нет. Вероятно, ваша конфигурация отклоняется, а не заменяются ваши форматирующие элементы.

Просьба предоставить LoggingPermission("control") в вашем JNLP file as described here.

1

Я столкнулся с такой же проблемой. Я не могу сказать, как остановить Webstart, заменив форматтер (или почему он не распознает его в первую очередь). Не удалось найти решение для него, но, наконец, вот как я работаю для меня с помощью Webstart. Я просто переназначил свой пользовательский форматтер (LoggerFormatter) для обработчиков во время работы:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("conf/logging.properties"); 
LogManager.getLogManager().readConfiguration(is); 
Handler[] handlers = Logger.getGlobal().getParent().getHandlers(); 
Formatter formatter = new LoggerFormatter(); 
for (Handler h : handlers) { 
    h.setFormatter(formatter); 
} 
+0

Большое спасибо. Это работает для меня очень хорошо :) –

Смежные вопросы