Nicht alle Eigenschaften, die an ein Protokollereignis angehängt sind, werden von allen Senken gerendert, die an den Protokollierer angehängt sind. Die hier verwendete Dateisenke enthält nur Zeitstempel, Level, Nachricht und so weiter.
Um die Report-ID in die Datei zu erhalten, ist es in der Senke der outputTemplate
:
var logger = new LoggerConfiguration()
.WriteTo.File(@"C:\Log.txt",
outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
.CreateLogger()
.ForContext("ReportId", 10);
logger.Information("Test");
Dies wird die Report-ID in jeder Nachricht enthalten.
ForContext
wird normalerweise verwendet, um einen kurzen temporären Bereich zu erstellen; wenn Sie die gleiche Eigenschaft auf alle Nachrichten möchten, können Sie Enrich.WithProperty()
verwenden:
var logger = new LoggerConfiguration()
.Enrich.WithProperty("ReportId", 10);
.WriteTo.File(@"C:\Log.txt",
outputTemplate: "{Timestamp:u} [{Level}] ({ReportId}) {Message}{NewLine}{Exception}")
.CreateLogger()
Flat Files eine gute Möglichkeit, um aufzustehen und schnell mit strukturierten Protokolle ausgeführt wird, aber einen Datenspeicher besser geeignet für strukturierte Lagerung, z.B. CouchDB
, RavenDB
oder Seq
, macht es viel schöner, Ereignisse basierend auf Eigenschaftswerten anzuzeigen und zu korrelieren.
zum JSON Sink ändern (auch eine einfache Datei-Targeting) ermöglicht strukturierte Protokollierung (dh alle. Felder) und wird leicht in Splunk usw. aufgenommen. – user2864740