2016-04-22 3 views
1

das ist meine serilog Konfiguration:Serilog getrennte Roll Dateien für jede SourceContext

Log.Logger = new LoggerConfiguration() 
.WriteTo.RollingFile(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
        @"Logs\log-{Date}.txt")) 
.MinimumLevel.ControlledBy(LogLevelSwitch) 
.CreateLogger(); 

ich so bin Anmeldung:

var log = Serilog.Log.ForContext<SomeClassName>(); 
log.Information("some log text"); 

Meine Frage:

Ich brauche eine Modifikation in meiner Konfiguration, um separate Protokolle für jeden SourceContext zu erstellen.

Ich brauche Dateien somthing wie Logs\log-{Date}-{SourceContext}.txt

dank Profis log ...

Antwort

3

Eine Möglichkeit, dies zu implementieren, ist Ihre eigene ILogEventSink Implementierung zu schaffen (die Schnittstelle ist sehr einfach), die intern zu einem von mehreren Versendungen RollingFileSink basiert auf der SourceContext Eigenschaft der LogEvent.

es zu konfigurieren (sagen wir, Sie Ihr Waschbecken SourceRollingFileSink nennen) können Sie verwenden WriteTo.Sink():

Log.Logger = new LoggerConfiguration() 
    .WriteTo.Sink(new SourceRollingFileSink()) 
    .CreateLogger(); 

Es gibt kein out-of-the-box-Implementierung so wird einige Arbeit erforderlich, aber es sollte nicht kompliziert sein . Achten Sie auf, dass Implementierungen von ILogEventSink Thread-sicher sein müssen.

+0

Vielen Dank. Ich werde es versuchen – abzarak