web-dev-qa-db-ja.com

NLogを使用したASP.NET Web API 2.1のグローバル例外処理?

ASP.NET Web API 2.1には、新しい グローバルエラー処理 機能が含まれています。例外をELMAHに記録する方法を示す example を見つけました。しかし、 NLog を使用して、エラーをデータベーステーブルに記録します。 NLogでWeb APIグローバルエラー処理を使用することはできますか?その場合、例を提供してください。

43
demo

実際には非常に単純です。手動でIExceptionLoggerを実装するか、基本クラスExceptionLoggerから継承します。

public class NLogExceptionLogger : ExceptionLogger
{
    private static readonly Logger Nlog = LogManager.GetCurrentClassLogger();
    public override void Log(ExceptionLoggerContext context)
    {
        Nlog.LogException(LogLevel.Error, RequestToString(context.Request), context.Exception);
    }

    private static string RequestToString(HttpRequestMessage request)
    {
        var message = new StringBuilder();
        if (request.Method != null)
            message.Append(request.Method);

        if (request.RequestUri != null)
            message.Append(" ").Append(request.RequestUri);

        return message.ToString();
    }
}

また、構成に追加します。

var config = new HttpConfiguration(); 

config.Services.Add(typeof(IExceptionLogger), new NLogExceptionLogger()); 

完全なサンプルソリューションを見つけることができます こちら

54
Filip W

便利かもしれない他のもの WebApiContrib.Tracing.NLog ITLogWriterインターフェースを使用してNLogでログに出力できるようにするパッケージ。 ITraceWriterの素晴らしい点は、「すべてのトレースが、そのコードの実行を引き起こした単一の要求に相関する可能性があることです( this link を参照)

4
oldbam