Search code examples
c#wcfloggingenterprise-library

How to Log Exception in a file?


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.


Solution

  • 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:

    1. Use the default Exception.ToString() implementation (it's not bad)
    2. Write a Custom Formatter that integrates into the LAB.
    3. Write a helper function that performs the formatting and passes the string into the Write method.

    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);
    
            return sb.ToString();
        }
    
        private static void CreateExceptionString(
            StringBuilder sb,
            Exception e,
            string indent = "")
        {
            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 + "  ");
            }
        }