Monday, October 30, 2006

Exception management and Upgrading from the old "microsoft application
block" to the new "enterprise library"



When Enterprise Library was called Microsoft Application Blocks, if you wanted to log an Exception, you would write (assuming “ex” is an Exception):

ExceptionManager.Publish(ex);

And if you wanted to log some extended properties you could do something like this:

NameValueCollection customerInfo = new NameValueCollection();
customerInfo.Add("name","scott");
customerInfo.Add("email",blah@blah.com);
ExceptionManager.Publish(ex,customerInfo);

Now that I am upgrading all legacy code to Enterprise Library 2006 for .NET 2.0, I couldn’t find a way to do this since the only way to log an error is:

ExceptionPolicy.HandleException(ex, "General Policy");

where “General Policy” is the name of the Exception Policy in the config file telling the Block what to do with the exception.

Looking in the config file, I noticed a formatter template with the following at the tail end of the template attribute, “…Extended Properties: {dictionary({key} - {value} )}". The formatter template is used to format the exception that is about to be logged somewhere. Looking through the code for where it loops through this Dictionary, I noticed it accessing an IDictionary of Exception.Data. Exception.Data? Where did that come from?

Data is a new .NET framework 2.0 property of the Exception class to allow you to add any user-defined information about the exception. Nothing more to it: Just a simple name/value dictionary for your enjoyment. As if you couldn’t figure it out, my new code would look like:

ex.Data.Add(“name”,”scott”);
ex.Data.Add(“email”,”blah@blah.com”);
ExceptionPolicy.HandleException(ex, "General Policy");

And as long as you use the default formatter, it will log this data at the end of the FormattedException field.

No comments: