仅在抛出异常时将堆栈跟踪写入日志文件

时间:2011-07-01 20:04:42

标签: c# .net logging nlog

我只想在有异常时编写堆栈跟踪,目前我这样做

 layout="${longdate}|${level}|${message} ${exception:format=tostring} | ${stacktrace}"

所以我总是把它放在我的日志文件中。

编辑:

我将这个布局用于我的所有日​​志记录,所以当我没有任何异常时我也会得到堆栈跟踪。但是只有当我有一些异常时我才需要它

当我有一个例外时,我有以下输出,它是我需要的

2011-07-01 22:59:02.3782|Debug|fffffffffffffffffffffffffffff System.Exception: Exception of type 'System.Exception' was thrown. | AppDomain.ExecuteAssembly => AppDomain._nExecuteAssembly => Program.Main

但无一例外:

2011-07-01 22:57:26.7117|Trace|fffffffffffffffffffffffffffff  | AppDomain.ExecuteAssembly => AppDomain._nExecuteAssembly => Program.Main

但我只想要

2011-07-01 22:57:26.7117|Trace|fffffffffffffffffffffffffffff

需要创意如何...

2 个答案:

答案 0 :(得分:13)

您可以使用以下布局:

${longdate}|${level}|${message} ${onexception:${exception:format=tostring} | ${stacktrace}}

答案 1 :(得分:2)

是的,在NLog中,您可以使用不同级别的警告,错误信息等。您还可以使用ErrorException,WarnException,InfoException来记录异常。 IE

logger.Error("This is an error message");

如果要显示例外,请使用以下内容。

logger.ErrorException("This is an error with an Exception", e);

更新:

<target name="Errors" xsi:type="File" fileName="${logDirectory}/ErrorLog.txt" layout="${longdate} ${message} ${exception:format=tostring}"/>

删除{stacktrace}

更新:

Exception e = new Exception();
e.StackTrace // <= The exception holds the stack trace

您将从异常中获取堆栈跟踪。