How to get the Stack trace when logging exceptions with NLog?

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}"

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}"/> 

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