понедельник, 21 марта 2011 г.

Протоколирование. Часть 4. Популярные платформы протоколирования.

1. TraceListener

Сайт разработчика: microsoft.com
Последняя дата обновления: Входит в состав .NET Framework
Функционал протоколирования, который поставляется совместно в .NET Framework (System.Diagnostics.TraceListener). Ранее я упоминал, что в составе .NET Framework есть функции Trace.Write и Debug.Write, которые являются одной из наиболее полезных особенностей отладки.NET Framework. Функционально Trace очень похож на Debug, но в отличие от своего Debug брата, который должен быть использован только во время отладки, Trace функция может быть внедрена в программу и поставлена заказчикам, в том случае, если пользователи сталкиваются с проблемой, они могут активировать Trace, просто редактируя файл конфигурации приложений.

1.1. Переключатели

Следующий элемент, с помощью которого можно управлять протоколированием – это переключатели. Грубо говоря – это флаги, которые можно использовать перед вызовов функции протоколирования.
Можно путем настройки в приложении переключателей трассировки включать или отключать трассировку. Так же для настройки переключателей можно использовать файл конфигурации (для веб-приложений web.config, в Windows приложении это app.config), где можно указать включен ли он, его уровень или определено количество и тип сообщений, передаваемых слушателям.Для перенастройки переключателей нужно изменить настройку файла конфигурации и перезапустить приложение. Существуют следующие переключатели (для указания значения переключателя можно использовать текст):
  • BooleanSwitch (0, соответствует Off, а любое ненулевое значение соответствует On)
  • TraceSwitch (значения многоуровневого переключателя, равные 0,1,2,3 и 4, соответствуют Off, Error, Warning, Info и Verbose соответственно, все числа больше 4 интерпретируются как Verbose, числа меньше 0 — как Off). Т.е. может применяться, если требуется ограничить уровни трассировки (по важности).
  • SourceSwitch – многоуровневой переключатель для управления выходными данными трассировки и отладки без повторной компиляции кода.
Переключатели могут определяться в коде, или через файл конфигурации (рекомендуется использовать, т.к. управление настройкой параметров в системе конфигурации обеспечивает большую гибкость — возможность включать и отключать различные переключатели и изменять уровни без перекомпиляции приложения, а затем использовать этот настроенный уровень в приложении).
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
 <system.diagnostics> 
  <trace autoflush="true"indentsize="4"> 
   <listeners> 
    <addname="configConsoleListener" type="System.Diagnostics.ConsoleTraceListener" /> 
    <addname="delimitedListener" type="System.Diagnostics.DelimitedListTraceListener" delimiter=":" initializeData="c:\delimitedOutput.txt" traceOutputOptions="ProcessId, DateTime" />
    <removename="utilex" /> 
   </listeners> 
  </trace> 
  <switches> 
   <addname="mySwitch"value="true"/> 
   <addname="TraceLevelSwitch"value="Warning" /> 
   <addname="SourceSwitch"value="Verbose"/> 
  </switches> 
 </system.diagnostics> 
</configuration> 

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

Присутствует возможность создавать свои классы переключателей.

Разработчик самостоятельно определяет, какие типы сообщения будут связаны с каждым из уровней.Надо самим проверять уровень детализации информации при попытке записи трассировки. Сама система это не делает. Например, если в файле настроек прописано, что уровень детализации только ошибки, а в коде будет стоять строка
Trace.TraceWarning()
, то сообщение о предупреждении будет записано, если не была осуществлена проверка
if (TraceSwitch.TraceWarning)
.
1.2. Прослушиватели
Классы Debug и Trace отправляют сообщения объектам, называемым прослушивателями (подписчики), которые получают и обрабатывают эти сообщения. Прослушиватели представляют собой объекты, получающие выходные данные трассировки и записывающие их в устройство вывода.Один из таких прослушивателей, DefaultTraceListener, создается и инициализируется автоматически при включении трассировки и отладки.

В состав .NET Framework входят следующие прослушиватели, которые удовлетворяют индивидуальным требованиям пользователям (набор можно дополнять):
Чтобы направить вывод Trace или Debug к дополнительным источникам, необходимо создать и инициализировать дополнительные прослушиватели трассировки.Если директива TRACE отключена, весь код трассировки при компиляции не обрабатывается и не включается в исполняемый код для развертывания. Или другими словами, чтобы использовать прослушиватель трассировки, необходимо включить трассировку или отладку.

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

Так же прослушиватель можно добавить через файл настройки. С помощью файла настройки можно выполнять следующие действия:
  • Добавить прослушиватель, задав его тип и параметры
  • Удалить прослушиватель
  • Удалить все прослушиватели, заданные в приложении ранее.
Прослушиватели также расширяются. Примеры
2. Trace Listeners Component for .NET

Последняя дата обновления:
License: платная

Расширение стандартных TraceListeners.

Стандартные .NET диагностические файлы журнала может стать громоздким. Было бы неплохо, если лог-файлы могли быть ограничены до приемлемых размеров и была возможность автоматически создавать циклические файлы.

Данный компонент является полнофункциональным, простым в использовании, который включает в себя циклическое создание файлов, HTTP, SMTP и MSMQ слушателей трассировки, которые расширяют класс System.Diagnostics.TraceListener. Слушатели трассировки полностью настраиваемые с помощью XML-файла конфигурации приложения.

Возможности:
  • Цикличность файлов трассировки  
    • Полнота конфигурации  
    • Определение расположения, основного имени и максимального размера файлов
    • Автоматическое включение временных меток в выводы трассировки
    • Идентификаторы процесса и потока могут быть автоматически включены
    • Конфигурация названия файла: <directoryName>\<filePrefix><sequenceNumber><fileSuffix>
  • Формат строки вхождения в лог-файл.
  • Различные цели:  
    • HTTP – вывод по указанному адресу
    • SMTP  
    • MSMQ
3. Microsoft Enterprise Library

Сайт разработчика: http://msdn.microsoft.com/en-us/library/dd203099.aspx и http://www.codeplex.com/entlib Последняя дата обновления: patterns & practices – Enterprise Library

EnterpriseLibrary– это проект с открытым исходным кодом от группы Patterns&Practices в Microsoft

В состав библиотекиMicrosoft'sEnterpriseLibrary (последняя версия 4.1, анонсируется выход 5й версии) входит много компонентов:

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

Enterprise Library Logging Application Block упрощает внедрение функций протоколирования.Разработчики могут использовать блок протоколирования записи информации в различные местах:
  • Журнал событий Windows
  • e-mail
  • База данных
  • Очередь сообщений
  • Текстовый файл
  • A Windows Management Instrumentation (WMI) event
  • Пользовательские расширения application block
Конфигурируется через файл как и большинство функциональности EntLib. Не приложение определяет где будет располагаться лог-информация, а параметры конфигурации определяют в каких случаях будет записываться информация (фильтрация по категории или приоритету), куда и как (формат сообщения с контекстной информацией). Это означает, что можно изменить поведение протоколирования без изменения кода приложения.
Встроено в студию:
log1log2

Архитектура:

log3

Удобство кода на 3 Удобство использования на 3


4. NetTrace

Сайт разработчика: http://www.codeproject.com/KB/trace/NetTrace.aspx
Последняя дата обновления: 18 декабря 2006 года
License: нет

NetTrace простой debug tracer, который поставляется с собственным классом отладки и встроенным диалогом, который позволяет разработчикам настроить протоколирование.

Много всяческих настроек по работе с лог-информацией (System.Diagnostics). Легкость понимания на троечку. Вывод только консоль или файл. Программная настройка. Расширяемость логгеров. Используемость на 2 (недоработана, не стал бы в коммерческих проектах использовать)

5. NSpring

Сайт разработчика: http://sourceforge.net/projects/nspring/
Последняя дата обновления: 22 октября 2003
License: BSDLicense

Функциональность:
  • Высокая производительность (сравнивают стандартные DebugandTrace)
  • Стабильная работа в многопоточном приложении 
  • Легка в использовании
  • Легко расширяется (свои loggers, filters, exception handlers, event formatters, data formatters, and log levels with ease, usually by just instantiating an object or implementing one or two methods)
  • Уровни логов сообщений.
  • Гибкая фильтрация сообщений. Признаком хорошего протоколирования является поддержка возможности выборочно отказаться от данных, основанных на более глубоких критериях, чем могут быть предоставлены с использованием уровней.
  • Гибкое форматирование: вывод данных в нужном формате, например xml
  • Поддержка данных. Удобный вывод сложных объектов (массивы, списки и словари) (FlatDataFormatter, TreeDataFormatter, XMLDataFormatter)
  • Поддержка нескольких логгеров.
  • Поддержка контекста данных (system/application/thread)
  • Поддержка событий
  • Разные логгеры: ConsoleLogger, DatabaseLogger, DebugLogger, EmailLogger, FileLogger (сархивацией), MessageQueueLogger, StreamLogger, TraceLogger (write their output to System.Diagnostics.Trace), WindowsEventLogger
  • Программная настройка
6. ObjectGuy Framework

Сайт разработчика: http://www.theobjectguy.com/dotnetlog/
Последняя дата обновления: не нашел инф
License:

  • Постоянная поддержка.
  • Настройка из конфига (файл настраивали). В примерах основная настройка идет все же через API.
  • Работа в веб-приложении
  • Работа в многопоточности
  • Обертка логгеров друг другом
  • Расширяемый
  • Фильтрация
  • Форматирование
  • Интегрируема с MS Visual Studio 2008 (просмотр отладочной информации в окне)
log4

Цели:
  • Файл
  • Windows event log
  • TCP socket
  • Память
  • email
  • Console, Debug, Trace
7. Log4Net

На её базе уже делаются другие с большей направленностью. К примеру, SPLog4net. SPLog4net – 2 классадляиспользованияlog4netвMOSS 2007: · Log4net ULS Appender · Log4net serializableоболочка, котораяможетбытьиспользованав workflows (implements the ILog interface and wraps a log4net concrete logger) Не будем останавливаться подробней на SPLog4net. Пойдем дальше. Сайт разработчика: http://logging.apache.org/log4net/ Последняя дата обновления: 18 сентября 2006 (Релиз: 1.2.10) License: ApacheLicense 2.0 log4net - логгер для .net-приложений, позволяющий выводить любые сообщения в файл, несколько файлов, в БД или еще куда-нибудь. Кроме самого пользовательского сообщения, может вывести подробную информацию (время, класс, метод, и т.д., где был вызван вывод данного сообщения). При разработке этой библиотеки протоколирования разработчики уделяли внимание двум целям: скорость работы и гибкость. Есть возможность переконфигурировать протоколирование во время выполнения программы с помощью файла конфигурации. Log4netсодержит три основные компоненты: · Логгеры (loggers) · Appenders. Совместно с Filter позволяет отфильтровать сообщения по некоторому признаку. Фильтры бывают по типу сообщения (ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF) и по тексту сообщения. · Layouts - определяется формат вывода сообщений в файл Эти три компонента работают вместе, чтобы позволить разработчикам писать отладочную информацию в зависимости от вида сообщения и уровня, также управляют во время выполнения программы как сообщения будут отформатированы и куда они должны быть записаны. Функциональность: · Оптимизирована по скорости · Поддержканескольких.NET Framework (1.0, 1.1, 2.0, Compact Framework 1.0, Mono 1.0/2.0, CLI 1.0 Compatible) · Направление сообщений в разные хранилища-получатели: текстовые файлы, в Event Log Windows, в СУБД итд · Иерархическая архитектура протоколирования. Позволяет каждому компоненту иметь свой лог.Позволяет протестировать отдельный компонент, не засоряя логи от других компонентов. · Конфигурация через xml-файл. Так же есть возможность конфигурировать программно. · Динамическая конфигурация. Log4net следит за файлом конфигурации. И при его изменении производит переконфигурирование без прерывания рабочего процесса. · Контекст логирования. GlobalContext и ThreadContext разрешают приложению хранить данные контекста, которые прилагаются к логируемому сообщению. · Модульный (плагины)ирасширяемый дизайн · Высокая производительность и гибкостью · Потокобезопасна · Проверенная архитектура. log4netоснован на весьма успешной библиотеке протоколированияlog4j, в развитии с 1996 года. Это популярная и проверенная архитектуры до сих пор была портирована на 12 языков. Пример записи лога каждый в день новый, чтобы частью имени файла была дата: <appender name="DebugFileAppender" type="log4net.Appender.RollingFileAppender"> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <file value="debug"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyyMMdd"/> <staticLogFileName value="false"/> <maxSizeRollBackups value="10"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%-5p [%d] [%C.%M] %m%n"/> </layout> </appender>

Удобства:Документация никакая, только на примерах (описание конфигурирования и примеры использования). НебольшиеописаниявSDK. Есть сторонняя утилита просмотра логов: http://yourlog4netviewer.codeplex.com/

8. NLog


Сайт разработчика: http://nlog-project.org/ Последняя дата обновления: Постоянная поддержка License:BSDlicense SDK отличное. NLog - NET библиотека, которая позволяет добавлять сложные трассировки кода для приложения, обеспечивая функциональность: · Поддержка нескольких.NET Framework (1.0, 1.1, 2.0, Compact Framework 1.0/2.0, Mono 1.0/2.0) · Конфигурирование через xml-файл. По сравнению с log4net более краткая конфигурация (минимум 8 строчек) <nlog><targets><target name="f" type="File" layout="${longdate} ${message} ${exception:format=tostring}"/></targets><rules><logger name="*" writeTo="f"/></rules></nlog> · Вместо замысловатых настроек фильтрации в log4net, в NLog можно задать условие с помощью выражения (пример ниже), язык выражений поддерживает логические операторы: <targetname="file"xsi:type="FilteringWrapper"condition="contains('${message}','1')">    <targetxsi:type="File"fileName="${basedir}/file.txt" /></target> · Возможность определять дополнительные аспекты логирования (асинхронность, буферизация, и т.д.) с помощью вложенных тэгов target. · Интеграция со Студией: файл проекта есть + Intellisense(TM). · Цели: файл, консоль, email, БД, MSMQ основе очередей сообщений, Журнал событий и тд. · Каждое трассировочное сообщение может сопровождаться контекстуальной информацией, которые будут отправлены к цели (target) (может использоваться как в сообщении так и в имени файла): текущие дата и время в различных форматах, уровень журнала, имя источника кода (имя класса и метода где было выведено сообщение), трассировки стека / информацию о методе, излучаемой отслеживания сообщений, Значения переменных окружения, информация об исключениях, имена машин, процессов и потоков и тд · Расширяема: своиtarget, Layout RendererиFilter · Контекстная информация содержит 48 переменных (LayoutRenderers). · Уровни сообщений   o Trace – Очень большой лог сообщений, по частоте и объему   o Debug –Менее детальный и/или менее частые сообщения отладки   o Info – Информационные сообщения   o Warn – Предупреждения, которые не отображаются пользователю приложения   o Error – Сообщения об ошибках   o Fatal – Фатальные сообщения об ошибке. После роковой ошибки приложения обычно прекращают свою работу · Динамическая конфигурация (автоматическая реконфигурация). Файл конфигурации автоматически считывается программой при старте. В длительных процессах (таких как Windows сервис или ASP.NET приложение) иногда желательно временно увеличить уровень логирования без остановки приложения. NLog может мониторить за файлами конфигурации и перечитать каждого из них, если они были изменены. Чтобы разрешить этот механизм, вы должны просто установить <nlogautoReload="true" /> в вашем файле конфигурации. Обратите внимание, что автоматическая реконфигурация включает поддержку файлов, так что если один из файлов изменился, то будет перегружена вся конфигурация. · Разделения файла конфигурации на несколько. · Создание внутренних переменных для файла конфигурации<nlog>

<variable name="logDirectory" value="${basedir}/logs/${shortdate}"/> 

<targets> 

<target name="file1" xsi:type="File" filename="${logDirectory}/file1.txt"/> 

<target name="file2" xsi:type="File" filename="${logDirectory}/file2.txt"/> 

</targets> 

</nlog>

· Устранение неполадок протоколирования, возникших из-за протоколирования. Иногда приложение не пишет в лог-файлы, хотя вроде протоколирование правильно настроено. Этому может быть много причин, по которым журналы не пишутся.Наиболее часто встречающейся проблемой являются разрешениями (права доступа). · Программное конфигурирование · Асинхронная обработка, обертки и сложные цели. NLog предоставляет обертку и сложные цели, которые изменяют поведение других целей, добавив функции, такие как: o асинхронной обработкой (обвернутая (wrapped) цель запускается в отдельном потоке) o retry-on-error Повторить-при-ошибке o Балансировка нагрузки (циклический целей) o Буферизация o Фильтрация o Резервное копирование целей (при отказа) o и тд Нет ограничений по глубине. Например, чтобы добавить асинхронное протоколирование с функциональностью повтора-при-ошибке:<targets>

<target name="n" xsi:type="AsyncWrapper"> 

<target xsi:type="RetryingWrapper"> 

<target xsi:type="File" fileName="${file}.txt"/> 

</target> 

</target> 

</targets> 

Т.к. асинхронная обработка является общим сценарием, NLog поддерживает сокращенную запись, чтобы все цели могли явно не указывать обертку. Нужно просто установить <целиAsync="true"/>, и все ваши цели будут обобщены с целевой AsyncWrapper. · Производительность.

9. SmartInspect


Сайт разработчика: http://www.gurock.com/products/smartinspect/ Последняя дата обновления: Постоянная поддержка License: Платная. Цена зависит от количества пользователей. SmartInspect – библиотека протоколирования для отладки и мониторинга за приложениямии включает в себя уникальный просмоторщик отладочной информации в режиме реального времени. Конкурент log4netи NLog. Платная. Из функциональных возможностей, отличающую её от других, можно отметить следующие: · См. сводную таблицу

10. ELMAH


Сайт разработчика: http://code.google.com/p/elmah/ Последняя дата обновления: 17августа 2009года. Лицензия: ApacheLicense 2.0 ELMAH (ErrorLoggingModulesandHandlers – модулииобработчикипротоколирования) - который полностью расширяемый. Он может быть динамически добавлен к работающемуASP.NET веб-приложению, или даже во все веб-приложений ASP.NET на машине, без необходимости повторной компиляции или повторного развертывания. После того ELMAHнастроен соответствующим образом и добавлен в работающее веб-приложение, мы получаем следующую функциональность, не изменив ни строчки кода: · Протоколирование почти всех необработанных ошибок · Веб-страницы для удаленного просмотра всего журнала записанных исключений. · Веб-страницу для удаленного просмотра всей подробной информации о любом записанном исключении. · Во многих случаях можно просмотреть оригинальные желтые экраны смертиASP.NET, создаваемые для данного исключения, даже с выключенным режимом CustomErrors. · Email оповещение о каждой возникшей ошибке в то время когда это происходит. · RSS ленту о 15 последних ошибках в журнале протоколирования. Дополнительные функции: · Протоколирование ошибок в несколько хранилищ


· Поддержка ASP.NET 1.x и 2.0 · Фильтрацию нежелательных исключений программно или через файл настройки. · Возможность реализовать свои страницы просмотра журнала ошибок · Экспорт журнала · Совместимость со студией 2002-2008 · И многое другое, которое можно узнать на сайте автора.

 


11. ASP.NET WebError Logging

Сайт разработчика: http://weberrorlogger.codeplex.com/ Последняя дата обновления: 30июля 2008года. Цель: Протоколирование необработанных/обработанных исключений в ASP.NET приложений на стороне сервера и на клиентской стороне для MS-AJAX приложений. Вдохновлен идеями ELMAH. Этот проект родился, т.к. ELMAH обладает ограничениями (я не понял какими), сложен и требует больше усилий. Оба проекта имеют свои плюсы и минусы (не могу привести список, это сам автор модуля заявляет). Стоит выделить способность записывать доп. информацию из контекста ошибки.

Комментариев нет:

Отправить комментарий

Еще статьи

2leep.com