How to get the Stack trace when logging exceptions with NLog?
Solution 1:
I had to use the one of the Logger.
+ Level + Exception
methods:
logger.ErrorException("ex", ex);
and a custom layout
layout="${exception:format=ToString,StackTrace}${newline}"
Solution 2:
As documented in How to Log Exceptions, starting with NLog 4.0, pass the exception as the first parameter to Error
, for example like this:
logger.Error(ex, "Nickers!");
In the NLog configuration (e.g. in web.config
or app.config
), include ${exception:format=tostring}
in the layout, for example like this:
<target name="f" type="File" layout="${longdate} ${message} ${exception:format=tostring}"/>
Solution 3:
Use the overloads that take an Exception as the second argument:
catch(Exception crap)
{
log.Error(crap, "Something went horribly wrong.");
}
Then in your layout include the ${exception}
layout renderer:
<target ...
layout="${longdate} ${message} ${exception:format=ToString}" />
Sources:
- https://github.com/NLog/NLog/wiki/How-to-Log-Exceptions
- https://github.com/nlog/NLog/wiki/Exception-Layout-Renderer