Exception.Message vs Exception.ToString()

.net, c#, exception

Solution

`Exception.Message` contains only the message (doh) associated with the exception. Example:

Object reference not set to an instance of an object

The `Exception.ToString()` method will give a much more verbose output, containing the exception type, the message (from before), a stack trace, and all of these things again for nested/inner exceptions. More precisely, the method returns the following:

ToString returns a representation of the current exception that is intended to be understood by humans. Where the exception contains culture-sensitive data, the string representation returned by ToString is required to take into account the current system culture. Although there are no exact requirements for the format of the returned string, it should attempt to reflect the value of the object as perceived by the user.

The default implementation of ToString obtains the name of the class that threw the current exception, the message, the result of calling ToString on the inner exception, and the result of calling Environment.StackTrace. If any of these members is a null reference (Nothing in Visual Basic), its value is not included in the returned string.

If there is no error message or if it is an empty string (""), then no error message is returned. The name of the inner exception and the stack trace are returned only if they are not a null reference (Nothing in Visual Basic).

Problem

I have code that is logging `Exception.Message`. However, I read an article which states that it's better to use `Exception.ToString()`. With the latter, you retain more crucial information about the error. Is this true, and is it safe to go ahead and replace all code logging `Exception.Message`? I'm also using an XML based layout for log4net. Is it possible that `Exception.ToString()` may contain invalid XML characters, which may cause issues?

Original source

Related problems