0

コード内の致命的なエラーのイベント ハンドラーを何らかの方法で設定できますか? このようなエラーが発生した場合、つまり次のようなエラーが発生した場合は、すぐにアプリケーションを終了したいと思います。

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

ただし、これが自動的に行われるようにしたい:

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

すべての致命的なエラーに対して何らかのコールバックをセットアップする方法、またはこれに対する構成オプションはありますか?

4

1 に答える 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: ただし、このアプローチはお勧めしません。ロガーはアプリケーションをシャットダウンしないでください。

于 2013-10-10T19:17:19.267 に答える