web-dev-qa-db-fra.com

Gestion des exceptions globales dans ASP.NET Web API 2.1 avec NLog?

L'API Web ASP.NET 2.1 inclut une nouvelle capacité gestion globale des erreurs . J'ai trouvé un exemple qui montre comment enregistrer les exceptions dans ELMAH. Mais j'utilise NLog pour enregistrer les erreurs dans une table de base de données. Est-il possible d'utiliser la gestion globale des erreurs de l'API Web avec NLog? Si oui, veuillez fournir un exemple.

43
demo

C'est en fait assez simple, vous implémentez IExceptionLogger à la main ou héritez de la classe de base, 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();
    }
}

Ajoutez-le également à la configuration:

var config = new HttpConfiguration(); 

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

Vous pouvez trouver un exemple complet de solution ici .

54
Filip W

Autre chose qui pourrait être utile WebApiContrib.Tracing.NLog package qui vous permet d'utiliser l'interface ITraceWriter pour générer des journaux avec NLog. Une chose intéressante à propos d'ITraceWriter est que "toutes les traces peuvent être en corrélation avec la seule requête qui a provoqué l'exécution de ce code (voir ce lien )

4
oldbam