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

痞子三分冷 提交于 2019-11-29 20:34:15

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

Use the overloads that take an Exception as the second argument:

catch(Exception crap)
{
    log.Error("Something went horribly wrong.", crap);
}

Then in your layout include the ${exception} layout renderer:

<target ...
    layout="${longdate} ${message} ${exception:format=ToString}" />

Sources:

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

As of NLog 4.5 you can now use:

logger.Error(exception, message);

and layout as follows:

"${longdate} ${level} ${message} ${exception:format=@}"

The @ means serialize all Exception-properties into Json-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!