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

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

C’est en fait assez simple, vous pouvez soit implémenter IExceptionLogger à la main, soit hériter 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, RequestToSsortingng(context.Request), context.Exception); } private static ssortingng RequestToSsortingng(HttpRequestMessage request) { var message = new SsortingngBuilder(); if (request.Method != null) message.Append(request.Method); if (request.RequestUri != null) message.Append(" ").Append(request.RequestUri); return message.ToSsortingng(); } } 

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 .

Autre élément utile : le package WebApiConsortingb.Tracing.NLog 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 corrélées à la requête unique qui a provoqué l’exécution de ce code (voir ce lien )