java.util.logging перестает работать через некоторое время

У меня проблема с java.util.logging. Все работает нормально с самого начала, но через некоторое время регистратор просто перестает записывать какие-либо данные в файл, и я понятия не имею, почему (без исключения, без ошибок) и как найти причину этой проблемы.

Я пробовал гугл, но не обнаружил подобной проблемы.

tl, dr; java.util.logging перестает работать, хотите знать, почему.


person Wojtek    schedule 11.06.2011    source источник
comment
Вы уверены, что используемый Handler не установлен на максимальный размер файла?   -  person Darien    schedule 11.06.2011
comment
нить застряла? или код благополучно работает?   -  person Jochen Bedersdorfer    schedule 11.06.2011
comment
Логгер @Darien останавливается в (казалось бы) случайных моментах времени / размера файла   -  person Wojtek    schedule 11.06.2011
comment
@Jochen Bedersdorfer, все приложение работает нормально (ну, если честно, там много потоков), и единственная проблема в том, что в какой-то момент регистратор (который нормально работал в этой среде) просто перестает выводить данные в файл .   -  person Wojtek    schedule 11.06.2011
comment
Можете ли вы сообщить о jstack-шоу?   -  person bestsss    schedule 11.06.2011


Ответы (2)


Обратите внимание, что логгеры, возвращаемые из фабричных методов getLogger, могут быть в любой момент собраны мусором, и это может нарушить работу, как и любые уровни, которые вы могли установить в main ().

http://download.oracle.com/javase/6/docs/api/java/util/logging/Logger.html

Используйте сильную ссылку на Регистратор, чтобы избежать его испорченного мусора:

Logger logger = Logger.getLogger("");
person Scott Ellsworth    schedule 20.07.2011
comment
Фантастический ответ. Сэкономил мне еще много часов работы. Большое спасибо, Скотт - person Sean Patrick Sutton; 07.01.2014
comment
Я поддержу это. Я боролся с той же проблемой (т.е. регистратор перестает работать через некоторое время) целых 2 дня !! Ваш ответ решил проблему; Я не знал, что фабрика неявно использует слабые ссылки. - person Giles Thompson; 18.02.2014

Как отмечает @Darien, это могло быть связано с FileHandler с ненулевым limit.

  • Обработчик мог перейти к следующему файлу - если count больше 1.
  • Если count равно единице, он может просто остановиться.

FWIW - большинство разработчиков Java отказались от использования java.util.logging много лет назад. Я бы рекомендовал log4j, slf4j или logback вместо java.util.logging.

person Stephen C    schedule 11.06.2011
comment
ну если нет значения по умолчанию тогда нет: FileHandler fileMy = new FileHandler("logger.txt", true); - person Wojtek; 11.06.2011
comment
Вы представляете этот спор с помощью свойств конфигурации LogManager? - person Stephen C; 11.06.2011
comment
@Stephen, мы действительно используем java.util.logging с улучшенным Logger (без синхронизации) и LogRecord (также без синхронизации в c-toe), проблем никогда не было. Фреймворк достаточно расширяемый и гибкий. У нас есть собственный конфигуратор с динамически развертываемым xml (т.е.не использовать файлы prop),. Imo, он превосходит оба фреймворка, особенно slf4j. - person bestsss; 11.06.2011
comment
@bestsss - проблема в том, что вам в значительной степени нужно расширить его. Например, стандартный конфигуратор слишком ограничен (я обнаружил). Напротив, log4j и его друзья не нуждаются в расширении, чтобы сделать их пригодными для использования. - person Stephen C; 11.06.2011
comment
@Stephen, ну файлы prop отстой для чего-либо, кроме материала key = value (наличие точек и классов означает плохое использование реквизита), хотя JBuilder использовал реквизиты для конфигурации. Я помню, что мы довольно давно использовали java.util.logging (1.4 была новой), но это стандартная библиотека, и она всегда там. Я действительно надеялся стать более популярным, но на самом деле ему не хватает таких вещей, как ежедневный перенос, хорошие форматеры, повторно развертываемые конфигурации и т.д ... но ничего, что вы не можете сделать вручную лучше, чем log4j :) - person bestsss; 11.06.2011
comment
@bestsss - я также помню, когда java.util.logging был новым. Это определенно было лучше, чем ничего. Однако мне надоело тратить усилия на кодирование и документирование, делая что-то вручную. Единственное преимущество java.util.logging в том, что вам не нужен сторонний файл JAR для ведения журнала. Но в большинстве нетривиальных Java-проектов используется множество сторонних библиотек, так что это не проблема. - person Stephen C; 12.06.2011
comment
Приношу свои извинения за то, что вернулся к вам только сейчас; но зачем переключаться на альтернативу, если мое приложение будет в несколько раз меньше, чем вся библиотека журналов? а также весь журнал уже был на месте, и единственная проблема заключалась в том, что регистратор застрял; Я переработал приложение (избавился от ненужных потоков), и теперь все работает без сбоев. Итог - я не знаю, почему это произошло, но это решено :) - person Wojtek; 22.06.2011
comment
@Wojtek - я бы сделал вывод, что фактическая ошибка вообще не заключалась в логировании. (И ваш вопрос был отвлекающим маневром.) Скорее, ваше приложение перестало создавать какие-либо сообщения журнала, потому что оно зависло из-за какой-то проблемы, связанной с потоком. Я предполагал, что вы говорили, что ваше приложение все еще выполняет полезную работу, и ведение журнала остановлено. - person Stephen C; 22.06.2011
comment
Что ж, это было так - каждый поток работал нормально, производя вывод в разных областях (трафик xmpp). - person Wojtek; 23.06.2011
comment
Что бы ни. Теперь, когда вы все изменили, вы никогда не узнаете наверняка, в чем была настоящая проблема. - person Stephen C; 23.06.2011