2013-10-07 1 views
0

Могу ли я каким-то образом настроить обработчик событий для фатальных ошибок в коде? Я хотел бы немедленно прекратить применение, если такая ошибка происходит, то есть что-то вроде этого:Как сделать NLog прекратить применение фатальных ошибок?

void Fail(string format, params object[] args) { 
    Logger.Fatal(format, args); 
    Environment.Exit(-1); 
} 

Однако я хотел бы, чтобы это произошло автоматически:

Logger.Fatal(...); // logs the error and invokes Environment.Exit(-1); 

Есть ли способ установить какой-то обратного вызова для всех фатальных ошибок или некоторой опции конфигурации для этого?

ответ

0

Да, вы можете сделать это с помощью MethodCall цели (см https://github.com/nlog/NLog/wiki/MethodCall-target)

Вот пример:

namespace SomeNamespace 
{ 
    using System; 

    public class MyClass 
    { 
     public static void HandleFatalEventLog(string level) 
     { 
      if(level.Equal("Fatal", StringComparison.OrdinalIgnoreCase)) 
      { 
       Environment.Exit(-1); 
      } 
     } 
    } 
} 

И NLog.config файл:

<?xml version="1.0" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets> 
     <target name="m" xsi:type="MethodCall" className="SomeNamespace.MyClass, MyAssembly" methodName="HandleFatalEventLog"> 
      <parameter layout="${level}" /> 
     </target> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="Fatal" writeTo="m" /> 
    </rules> 
</nlog> 

PS: Но я не рекомендовал бы такой подход, регистратор не должен останавливать приложение