Enterprise Library 5: Exceptions not being logged to Event log on Windows Azure
I have a WCF service that's deployed as a Windows Azure Web Role.
I'm using Enterprise Library for exception handling and in my local Development Fabric, exceptions seem to be handled and logged correctly using the Event Log Handler (logging to the Application event log).
When it's running on Azure, while the Exception Policy seems to be being applied (as I'm observing correct handling of certain expected exceptions), nothing's being logged to the Event Log.
Here's the exception handling policy:
<add name="Entity">
<exceptionTypes>
<add name="All Exceptions"
type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow">
<exceptionHandlers>
<add name="Logging Exception Handler"
type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
logCategory="General"
eventId="100"
severity="Error"
title="Enterprise Library Exception Handling"
formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling"
priority="0" />
开发者_如何学Go </exceptionHandlers>
</add>
</exceptionTypes>
</add>
And here's the Logging configuration:
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<add name="Event Log Listener"
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="Enterprise Library Logging" formatter="Text Formatter"
log="Application"
machineName="."
traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
</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}
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="Event Log Listener" />
</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="Event Log Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
Any idea what's going wrong?
The best way to do logging is to use the diagnostic trace listener. The names for Event Logs in Windows Azure is different. To do with this Enterprise Library you will need to change from the Event Log listener to the Windows Azure Diagnostic Trace listener. We have more information about this in our book "Moving Applications to the Cloud". The code is in VS 2008 but you can open in VS 2010 to see the samples. In the code and see how we setup Enterprise Library Logging with the Windows Azure Diagnostic Trace Listener. You will need to make sure to move the logs over to see the information. The book goes into detail about this.
If you want to just get a quick look you can download the Music Application here from our codeplex site that shows how to use Enterprise Library with Windows Azure. This is older version that we are working to upgrade.
More on tracing here.
A prerequisite for using the Event Log Trace Listener with the default settings is to ensure that the default event source ("Enterprise Library Logging") is installed. In order to install this event source (or any other custom source) and use this listener, a startup task that executes Windows PowerShell scripts can be used. These scripts install the custom source. A QuickStart with the corresponding PowerShell script uses this approach.
精彩评论