Pull to refresh

Логирование с помощью Microsoft Enterprise Library 4.1

Reading time5 min
Views8.6K
Original author: David Starr
В данной статье рассказывается как работать с блоком логирования из библиотеки Microsoft Enterprise Library 4.1. Решил разобраться после посещения Patterns & Practices Roadmap Kiev.

Установка Enterprise Library


Загрузить Enterprise Library 4.1 можно отсюда. Помните, что кроме блока логирования устанавливается много других компонентов.


Создание нового проекта в Visual Studio


Откройте Viual Studio, создайте новый консольный проект (console application) и назовите его, к примеру, HelloWorldEntLibLogging.

Далее необходимо добавить ссылку (reference) на библиотеку:

image

Конфигурация логирования


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

С помощью Solution Explorer добавляем новый Application Configuration File, имя файла оставляем по умолчанию — app.config:

image

Далее нажимаем правой кнопкой мыши на app.config и выбираем Edit Enterprise Library Configuration:

image

В открывшемся редакторе выбираем New | Logging Application Block:

image

В дереве редактора должен появиться новый Logging Application Block:

image

Закрываем редактор, открываем app.config:

  1: <?xml version="1.0" encoding="utf-8"?>
  2: <configuration>
  3:   <configSections>
  4:     <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  5:     <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  6:   </configSections>
  7:   <loggingConfiguration name="Logging Application Block" tracingEnabled="true"
  8:     defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
  9:     <listeners>
 10:       <add source="Enterprise Library Logging" formatter="Text Formatter"
 11:         log="Application" machineName="" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 12:         traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 13:         name="Formatted EventLog TraceListener" />
 14:     </listeners>
 15:     <formatters>
 16:       <add template="Timestamp: {timestamp} Message: {message} Category: {category} Priority: {priority} EventId: {eventid} Severity: {severity} Title:{title} Machine: {machine} Application Domain: {appDomain} Process Id: {processId} Process Name: {processName} Win32 Thread Id: {win32ThreadId} Thread Name: {threadName} Extended Properties: {dictionary({key} - {value} )}"
 17:         type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
 18:         name="Text Formatter" />
 19:     </formatters>
 20:     <categorySources>
 21:       <add switchValue="All" name="General">
 22:         <listeners>
 23:           <add name="Formatted EventLog TraceListener" />
 24:         </listeners>
 25:       </add>
 26:     </categorySources>
 27:     <specialSources>
 28:       <allEvents switchValue="All" name="All Events" />
 29:       <notProcessed switchValue="All" name="Unprocessed Category" />
 30:       <errors switchValue="All" name="Logging Errors & Warnings">
 31:         <listeners>
 32:           <add name="Formatted EventLog TraceListener" />
 33:         </listeners>
 34:       </errors>
 35:     </specialSources>
 36:   </loggingConfiguration>
 37: </configuration>


* This source code was highlighted with Source Code Highlighter.

Сейчас в файле много различных настроек, но они нас в данный момент не интересуют.

Добавляем код логирования в приложение


Подключаем пространство имен:

using Microsoft.Practices.EnterpriseLibrary.Logging;

* This source code was highlighted with Source Code Highlighter.

Далее добавляем следующий код в Program.cs:

class Program
{
  static void Main(string[] args)
  {
    LogEntry entry = new LogEntry()
               {
                 Message = "Hello Ent. Lib. Logging"
               };
   
    Logger.Write(entry);
  }
}


* This source code was highlighted with Source Code Highlighter.

Это все, что нужно сделать!

Запуск приложения и проверка логирования


Выполняем приложение, далее запускаем Windows Event Viewer и смотрим последние события. Вы должны увидеть записанную информацию:

image

Также вы можете указать Severity в вашем LogEntry:

LogEntry entry = new LogEntry()
           {
             Message = "Hello Ent. Lib. Logging",
             Severity = TraceEventType.Critical
           };


* This source code was highlighted with Source Code Highlighter.


Если вы запустите приложение сейчас, то увидите критическую ошибку Windows Event Viewer.

P.S. От себя добавлю, что помимо блока логирования в состав EntLib входит большое количество других блоков, в том числе Caching, Cryptography, Data Access, Exception Handling, Logging, Policy Injection, Security, Validation и Unity. Более подробно можно почитать на сайте http://entlib.codeplex.com/.
Tags:
Hubs:
Total votes 20: ↑13 and ↓7+6
Comments23

Articles