2016-09-16 6 views
3

Ich verwende Serilog als mein Protokollierungsframework (mit Seq als meine Protokollsenke). Wenn ich Ausnahmen registriere, benutze ich etwas wie:So passen Sie die Ausnahmeausgabe mithilfe des Serilogs an

Meine Anwendung verwendet stark async/await-Methoden. Wenn unbehandelte Ausnahmen auftreten, sind die Stack-Traces sehr schwer zu lesen. Es gibt ein Nuget-Paket, das asynchrone Stack-Traces bereinigt (https://github.com/aelij/AsyncFriendlyStackTrace). Dies schafft eine Erweiterung Methode, die Sie zu einem modifizierten/clean-Stack-Trace zugreifen zu geben:

ex.ToAsyncString() 

ich diese Bibliothek in der Lage sein möchten, verwenden, um den Stack-Trace abzufangen, bevor es zu Seq geschrieben wird und stattdessen log die saubere/modifizierte Stapelverfolgung

Gibt es eine Möglichkeit mit Serilog/Seq, die genaue Ausgabe der Fehlerzeichenfolge zu steuern, die an die Protokollsenke gesendet wird?

+0

Wenn Sie einen Haltepunkt bei 'log.Error (ex, .....)' setzen, können Sie zu diesem Zeitpunkt an 'ex.Message oder InnerException' gelangen. – MethodMan

Antwort

2

Vielleicht enrichment könnte hier hilfreich sein. Obwohl dies nicht ausdrücklich in diesem Link diskutiert, können Sie benutzerdefinierte Anreicherungs bauen:

public class ExceptionEnricher : ILogEventEnricher 
{ 
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) 
    { 
     if (logEvent.Exception != null) 
     { 
      // do something here 

      propertyFactory.CreateProperty("ExtraExceptionDetail", extraDetail); 
     } 
    } 
} 

dann ...

var loggerConfig = new LoggerConfiguration() 
    .MinimumLevel.Debug() 
    .WriteTo.Seq(url) 
    .Enrich.With<ExceptionEnricher>() 
    .Enrich.FromLogContext(); 

ich Sie verwiesen keine Erfahrung mit dem Paket, aber dieser Ansatz können Sie Abfangen und Ändern/Hinzufügen/Entfernen von Eigenschaften des Ereignisses, bevor es in Seq geschrieben wird.

Verwandte Themen