2017-10-12 4 views
2

Ich möchte mehrere Protokolldateien haben und versuche einen Weg zu finden, mehrere Quellen auszuschließen. Dies ist mein Code:Serilog: Wie man mehrere Quellen ausschließt

Log.Logger = new LoggerConfiguration() 
    .ReadFrom.Configuration(configuration) 
    .Enrich.FromLogContext() 
    .WriteTo.Console() 
    .WriteTo.Logger(l => l.Filter.ByIncludingOnly(Matching.FromSource("Hangfire")) 
     .WriteTo.Async(a => a.RollingFile("Logs/hangfire-{Date}.txt")) 
    ) 
    .WriteTo.Logger(l => l.Filter.ByExcluding(Matching.FromSource("Hangfire")) 
     .WriteTo.Async(a => a.RollingFile("Logs/main-{Date}.txt")) 
    ) 
    .CreateLogger(); 

Wie Sie ich habe Unterlogger sehen: erste hangfire Protokolle sammelt nur, zweite alle Protokolle mit Ausnahme von hangfire. Aber ich möchte einen weiteren Ausschlussfilter hinzufügen, zum Beispiel möchte ich Hangfire und IMyClass Protokolle ausschließen. Wie kann ich es tun?

Antwort

1

Matching.FromSource() Rückgabe einer Funktion von LogEvent zu bool. Sie können die Vorteile, dass nehmen zwei Filterfunktionen zu erstellen:

var hangfire = Matching.FromSource("Hangfire"); 
var myClass = Matching.FromSource("MyClass"); 

Und sie dann inline nennen:

.WriteTo.Logger(l => l.Filter.ByExcluding(le => myClass(le) || hangfire(le)) 
    .WriteTo.Async(a => a.RollingFile("Logs/main-{Date}.txt")) 
) 
+1

Ihnen sehr danken. – user348173

Verwandte Themen