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.
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 .
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 )