Запись трассировки стека в файл журнала только при возникновении исключения - PullRequest
7 голосов
/ 02 июля 2011

Я хочу записывать трассировку стека только тогда, когда у меня есть исключения, в настоящее время я делаю это следующим образом

 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 ]

13 голосов
/ 09 августа 2011

вы можете использовать следующую раскладку:

${longdate}|${level}|${message} ${onexception:${exception:format=tostring} | ${stacktrace}}
2 голосов
/ 02 июля 2011

Да, в NLog вы можете использовать разные уровни Warn, Error Info и т. Д. Вы также можете регистрировать исключения с помощью 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

Вы получите трассировку стека из исключения.

...