Как отрегулировать количество распечаток, генерируемых инструкцией регистрации, с течением времени? - PullRequest
0 голосов
/ 12 июня 2009

Как можно ограничить количество распечаток журнала программы максимум X распечатками в течение Y секунд?

Программирование на стороне сервера с помощью java.util.logging, в моем коде много информации, предупреждений и сообщений об ошибках, таких как:

s_logger.logp(Level.WARNING, myClassName, myMethodName, "msg.code.in.properties.file");

С одной стороны, я хочу, чтобы вышеупомянутое предупреждающее сообщение было напечатано на STDOUT, поскольку оно служит признаком того, что что-то пошло не так, особенно при исследовании проблем на производстве, но с другой стороны, печатая многочисленные строки, которые та же самая история в течение короткого периода времени, не имеет добавленной стоимости, но вместо этого поражает производительность и вводит прокрутку слепоты.

То, что я ищу, - это механизм / API, который может регулировать распечатки не более чем по x сообщениям на код сообщения в течение y секунд. Например, в течение минуты я не хочу генерировать и записывать в журнал более 10 сообщений типа: «транзакция истекла».

Я был бы рад за API или ссылку на библиотеку, кто-нибудь?

Ответы [ 4 ]

1 голос
/ 12 июня 2009

если вы хотите использовать стандартную библиотеку / механизм ведения журналов, вы можете создать свою собственную оболочку вокруг стандартного регистратора, которая проверит ваши условия на предмет регистрации или нет и передаст информацию в механизм ведения журнала, только если условия выполнены .

или вы можете написать свой собственный (простой, а может и нет) регистратор:)

0 голосов
/ 18 декабря 2015

Как можно ограничить количество распечаток журнала программы максимум X распечатками в течение Y секунд?

Если у вас есть доступ к JavaMail 1.5.5 или logging-mailhandler 1.5.5 , вы можете использовать com.sun.mail.util.logging.DurationFilter , чтобы ограничить определенные java.util.logging.Logger или java.util.logging.Handler .

То, что я ищу, - это механизм / API, который может регулировать распечатки не более чем по x сообщениям на код сообщения в течение y секунд. Например, в течение минуты я не хочу генерировать и записывать в журнал более 10 сообщений типа: «транзакция истекла».

Если сообщение о тайм-ауте является локальным только для одного регистратора, то оно такое же, как указано выше. В противном случае вам нужно создать собственный фильтр. Как указано в других ответах, нетрудно составить фильтры с другими фильтрами.

Другой вариант - создать прокси-обработчик, который буферизует и удаляет повторяющиеся сообщения в заданном временном окне, прежде чем публиковать их в каком-либо другом нисходящем обработчике.

0 голосов
/ 17 июня 2009

Гили, я не уверен, что что-то подобное существует прямо из коробки. Хорошая реализация журналирования, такая как Logback , позволит вам определять регистраторы для каждой части вашего кода, а затем настраивать уровень журналирования каждого регистратора (например, по умолчанию только сообщения WARN и выше, но INFO или даже FINE для Логгер, контролирующий область, которую вы активно отлаживаете).

Реализация ведения журнала также, как правило, может управлять несколькими файлами журнала, переворачивая текущий журнал в сжатую версию архива и запуская новый, либо через регулярные интервалы, либо всякий раз, когда файл журнала становится слишком большим.

Если вы контролируете код, вы можете изменить свои операторы регистрации, чтобы они не генерировали так много избыточных предупреждений. Например, если вы получаете много тайм-аутов транзакций, возможно, вы могли бы подождать последовательно более длительные периоды между попытками запуска транзакции, прежде чем полностью отказаться. (Это имеет преимущество, заключающееся в снижении нагрузки на серверы, реализующие транзакции, что дает им время для восстановления.)

Другой подход, на который ссылается zappan, заключается в создании собственных фильтров журнала. В java.util.logging вы можете прикрепить свои собственные фильтры к вашим фильтрам , чтобы ограничить то, что они печатают.

Более сложный подход к фильтрации заключается в настройке реализации ведения журнала для отправки всех сообщений журнала по многоадресному адресу вместо файла. Вы бы написали программу фильтрации, которая прослушивает многоадресную рассылку и выборочно записывает те, которые вы хотите, на диск (например, она может работать на сервере агрегации журналов, если у вас есть распределенная система). Другие фильтры могут извлекать наиболее важные сообщения и обновлять графическое отображение состояния вашей системы.

0 голосов
/ 17 июня 2009

Спасибо. Я уже учел это.
Я надеялся на что-то, что уже существует, так как считаю, что эта проблема распространена в проектах разработки на стороне сервера.

...