Objetivo
Ofrecer una introducción al manejo de excepciones que se pueden presentar en una aplicación web e incluir su registro en el event viewer.
Prerrequisitos
- Enterprise Library 5.0.
- Visual Studio
Pasos
La versión de Enterprise Library que se uso es la 5.0
1. Instalar Enterprise Library 5.0.
2. Adicionar las referencias a los siguientes assemblies, en el proyecto web o proyecto de cara al usuario:
Microsoft.Practices.EnterpriseLibrary.Common, Microsoft.Practices.ServiceLocation, Microsoft.Practices.Unity, Microsoft.Practices.Unity.Interception, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Microsoft.Practices.EnterpriseLibrary.Logging
3. En el archivo web.config y dentro del elemento <configuration>, colocar las siguientes lineas que incluye el manejo de las excepciones y el logging de las mismas.
<configSections>
<section name=”loggingConfiguration” type=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”true”/>
<section name=”exceptionHandling” type=”Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Configuration.ExceptionHandlingSettings, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”true”/>
</configSections>
<loggingConfiguration name=”Logging Application Block” tracingEnabled=”true” defaultCategory=”General” logWarningsWhenNoCategoriesMatch=”true”>
<listeners>
<add name=”FormatEventLog TraceListener” type=”Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ listenerDataType=”Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ source=”NombreDeAplicacion” formatter=”Text Formatter” log=”Application” machineName=””/>
</listeners>
<formatters>
<add type=”Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ template=”Timestamp: {timestamp}{newline}Message: {message}{newline}Category: {category}{newline}Priority: {priority}{newline}EventId: {eventid}{newline}Severity: {severity}{newline}Title: {title}{newline}Activity ID: {property(ActivityId)}{newline}Machine: {localMachine}{newline}App Domain: {localAppDomain}{newline}ProcessId: {localProcessId}{newline}Process Name: {localProcessName}{newline}Thread Name: {threadName}{newline}Win32 ThreadId:{win32ThreadId}{newline}Extended Properties: {dictionary({key} – {value}{newline})}” name=”Text Formatter”/>
</formatters>
<categorySources>
<add switchValue=”All” name=”General”>
<listeners>
<add name=”FormatEventLog TraceListener”/>
</listeners>
</add>
<add switchValue=”Error” name=”Exceptions”>
<listeners>
<add name=”FormatEventLog TraceListener”/>
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue=”All” name=”All Events”/>
<notProcessed switchValue=”All” name=”Unprocessed Category”/>
<errors switchValue=”All” name=”Logging Errors & Warnings”>
<listeners>
<add name=”FormatEventLog TraceListener”/>
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
<exceptionHandling>
<exceptionPolicies>
<add name=”ServiceLayerExceptionPolicy“>
<exceptionTypes>
<add name=”Exception” type=”System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ postHandlingAction=”NotifyRethrow”>
<exceptionHandlers>
<add name=”Logging Handler” type=”Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ logCategory=”Exceptions” eventId=”100″ severity=”Error” title=”TituloaVisualizarEnEventViewer” formatterType=”Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling” priority=”0″/>
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
Las partes señaladas en color rojo, indican el nombre de la aplicación web, el nombre de la política de excepciones definida en el Enterprise Library y el titulo que recibirá los errores registrados en el event viewer.
4. Para garantizar un manejo centralizado de errores, se implementa el evento Application_Error del global.asax.cs