Должна ли подсистема регистрации исключений иметь ограниченную пропускную способность? Если да, то как? - PullRequest
0 голосов
/ 27 декабря 2010

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

Это заполняет нашу базу данных Oracle, и когда журналы повторов достигли своего предела размера, дБ прекратились.

РЕДАКТИРОВАТЬ: Конечно, самое главное, чтобы найти причину бесконечного цикла исправить ошибку в системе. Мы уже сделали это, и это не вопрос здесь. Система может иметь больше подобных ошибок (это служба Windows, и она работает постоянно), и в этом случае одно приложение сломало всю БД, то есть все приложения в этой БД Oracle.

Меня больше всего интересуют ваши впечатления архитектурно. И это из других каркасов, таких как log4net, log4j и других. Как они справляются с потоком исключений? Просто обработать их, как и все другие исключения?

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

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

Если вы используете журналы событий Windows, это может быть сделано автоматически, поскольку старые записи могут автоматически стираться при заполнении журнала. Вы можете написать код системы на основе БД, чтобы сделать то же самое.

Конечно, вы хотите сделать все возможное, чтобы устранить такие ошибки, в первую очередь, когда это возможно!

Другим вариантом может быть обнаружение и игнорирование нескольких последовательных ошибок одного и того же времени ... возможно, вместо этого просто обновляется свойство / поле count.

2 голосов
/ 27 декабря 2010

Я бы больше беспокоился о коренной причине бесконечного цикла, чем об ограничении ведения журнала.

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

Повтор журналов?Как часто ты их смываешь?Конечно, у вас нет одной большой сделки, не так ли?

1 голос
/ 29 декабря 2010

Можете ли вы вести запись в другую базу данных без повторов? Это защитит производственную базу данных.

В наших приложениях есть центральный обработчик исключений, через который проходят все исключения

  void OnExceptionOccurs(Exception ex, 
         string enduserFriendlyContextDescription, 
         string tecnicalContextDescription, 
         ILogger loggerBelongingToProcess)

этот обработчик может решить, как вести журнал, и у вас есть центральное место для точки останова при отладке

...