![]() |
Технология Клиент-Сервер 2008'1 |
||||||
|
В данной статье я расскажу, как создать эффективную систему протоколирования всех видов ошибок 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 выглядят точно так же.
Главной точкой входа системы протоколирования является класс ExceptionManager, представляющий собой Singleton-объект. Для протоколирования наших исключений мы будем использовать метод PublishException этого класса. ExceptionManager содержит список слушателей, которым он делегирует вызов. Мы можем добавлять и удалять слушателей, вызывая соответственно методы AddListener и RemoveListener данного класса. Для создания нового слушателя нам следует всего лишь создать новый класс, который наследуется от BaseTraceListener; это мы рассмотрим в разделе «Расширяемость» настоящей статьи.
Разумеется, существует множество направлений развития данных компонентов протоколирования. Например, перенаправление исключения не всем, а заранее заданным слушателям, или, скажем, инкапсуляция логгера в серверный компонент, чтобы разработчик мог с легкостью его настроить, обходясь без написания какого-либо кода вообще. Вероятно, я встрою такие возможности в следующую версию этого компонента. А сейчас пусть эти идеи помогут вам отслеживать исключения в ваших приложениях.
Copyright © 1994-2016 ООО "К-Пресс"