I want to be able to do logging in every catch block. Something like this.
catch (Exception exception)
{
Logger.Write(exception);
}
and then the settings in the configuration will pick up the Message and StackTrace property etc using customer listener.
I would like to use Enterprise Library Logging Application Block. I'm sure someone must have done this already.
Others have posted some good links on getting the Logging Application Block (LAB) working so I won't duplicate that here.
In terms of formatting your exception you have 3 choices that I can think of:
Exception.ToString()
implementation (it's not bad)If option 1 doesn't meet your needs then I would recommend going with option 3 (since option 2 is overkill).
A simple example would be something like:
catch (Exception exception)
{
Logger.Write(LogHelper.CreateExceptionString(exception));
}
...
public static string CreateExceptionString(Exception e)
{
StringBuilder sb = new StringBuilder();
CreateExceptionString(sb, e, String.Empty);
return sb.ToString();
}
private static void CreateExceptionString(StringBuilder sb, Exception e, string indent)
{
if (indent == null)
{
indent = String.Empty;
}
else if (indent.Length > 0)
{
sb.AppendFormat("{0}Inner ", indent);
}
sb.AppendFormat("Exception Found:\n{0}Type: {1}", indent, e.GetType().FullName);
sb.AppendFormat("\n{0}Message: {1}", indent, e.Message);
sb.AppendFormat("\n{0}Source: {1}", indent, e.Source);
sb.AppendFormat("\n{0}Stacktrace: {1}", indent, e.StackTrace);
if (e.InnerException != null)
{
sb.Append("\n");
CreateExceptionString(sb, e.InnerException, indent + " ");
}
}