2016-05-13 5 views
2

Wir haben einen Service mit einem Main() -Methode, die unsere serilog Logger wie folgt initialisiert:Enrich.WithProperty hinzufügen globalen Logger serilog nach der Erstkonfiguration

  Log.Logger = new LoggerConfiguration() 
       .MinimumLevel.Debug() 
       .WriteTo.ColoredConsole() 
       .WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"], apiKey: ConfigurationManager.AppSettings["SeqApiKey"]) 
       .Enrich.WithProperty("ServiceName", "SomeConsumer")     
       .CreateLogger(); 

nun in einem anderen Verfahren, möchte ich anbringen eine zusätzliche Eigenschaft für diesen Logger. Ich möchte eine .Enrich.WithProperty hinzufügen, weil ich den Logging-Stil von Log.Error("Somelog")

mag Wie kann ich das tun? Ich möchte nur eine neue Eigenschaft mit einer Zeichenfolge anhängen.

Antwort

3

Nach der Methode CreateLogger können Sie die erstellte Logger-Instanz nicht ändern. Wenn eine bestimmte Methode oder Klasse das Protokoll nur in diesem bestimmten Kontext mit mehr Variablen anreichern möchte, ist ForContext der richtige Weg.

Eine Alternative wäre, einen dynamischen benutzerdefinierten Anreicherer zu erstellen, den Sie am Anfang einrichten, der aber sein Verhalten je nach Logik ändert.

+0

Danke für die Klärung – redwards510

0

Ich habe gerade versucht dies, und ich nehme an, es tun wird:

SomeMethod() { 
    var log = Log.Logger.ForContext("PropertyName", "Some string I need so bad"); 
    log.Debug("Beginning of log with enrichment"); 

} 

Auf diese Weise ich die using Block vermeiden kann, aber ich bin immer noch neugierig, ob es einen Weg gibt, die globale Log zu ändern. Logger-Objekt

+0

Das ist der richtige Weg, um mit Serilog alles zu tun, was Sie brauchen. Sie können Logger aus vorhandenen Loggern erstellen und Kontextvariablen (eine oder mehrere) hinzufügen. –

Verwandte Themen