Продолжается подписка на наши издания! Вы не забыли подписаться?

Протоколирование исключений в ASP.NET AJAX

Автор: Кази Манзур Рашид
Опубликовано: 17.04.2008

Предисловие

В данной статье я расскажу, как создать эффективную систему протоколирования всех видов ошибок JavaScript. До выхода в свет технологии ASP.NET AJAX для протоколирования ошибок в приложениях использовались такие удобные компоненты, как, например, Microsoft Enterprise Library и Log4net. С появлением ASP.NET AJAX значительная часть кода была перенесена с Web-сервера в браузер, и теперь для улучшения работы приложений необходима мощная система протоколирования, которая охватывала бы и обработку всех видов ошибок в браузере, и запись их на сервере. В этой статье я представлю систему протоколирования исключений, разработанную на ASP.NET AJAX.

Концепция

Лично я всегда предпочитал Microsoft Enterprise Library и удачно использовал ее во всех своих разработках. Особенно мне нравится часть блока обработки исключений (Exception Handling) в Enterprise Library – она поддерживает возможность, позволяющую нескольким слушателям (trace listener) протоколировать одно и то же исключение. По умолчанию туда встроены слушатели Text File, EventLog, Email, Database и MSMQ. А самое замечательное заключается в том, что можно написать свой собственный слушатель и легко подключить его к Enterprise Library. В нашей системе протоколирования мы будем следовать этой же концепции. Поскольку наша система работает не на сервере, а в браузере, в ней нет таких компонентов, как Text file и EventLog, и вместо них используются другие наборы слушателей: Alert, Debug, Div и WebService. Давайте рассмотрим объектную модель нашей системы протоколирования. На рисунке изображены классы .NET, потому что я сгенерировал диаграмму классов в Visual Studio; объекты в JavaScript выглядят точно так же.


Рисунок 1. Диаграмма классов.

Главной точкой входа системы протоколирования является класс ExceptionManager, представляющий собой Singleton-объект. Для протоколирования наших исключений мы будем использовать метод PublishException этого класса. ExceptionManager содержит список слушателей, которым он делегирует вызов. Мы можем добавлять и удалять слушателей, вызывая соответственно методы AddListener и RemoveListener данного класса. Для создания нового слушателя нам следует всего лишь создать новый класс, который наследуется от BaseTraceListener; это мы рассмотрим в разделе «Расширяемость» настоящей статьи.

Применение

ExceptionManager

BaseTraceListener

SysDebugTraceListener

AlertTraceListener

DivTraceListener

WebServiceTraceListener

Несколько важных замечаний

Заключение

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


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

Copyright © 1994-2016 ООО "К-Пресс"