2015-02-03 22 views
8

Używam Serilog do logowania i nie mogę "dowiedzieć się, jak rozdzielić zdarzenia dziennika na różne pliki. Na przykład chcę zalogować błędy do error_log-ddmmyyy.txt i ostrzeżenia do warn_log-ddmmyyy.txt.Serilog - wiele plików dziennika

Tu idzie o konfiguracji Rejestrator:

Log.Logger = new LoggerConfiguration() 
      .WriteTo.Logger(lc => 
       lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Warning")) 
        .WriteTo.RollingFile(
         Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\warn_log-{Date}.txt"), 
         outputTemplate: OutputTemplate)) 
      .WriteTo.Logger(lc => 
       lc.Filter.ByIncludingOnly(Matching.WithProperty("Level", "Error")) 
        .WriteTo.RollingFile(
         Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Logs\error_log-{Date}.txt"), 
         outputTemplate: OutputTemplate)) 
      .CreateLogger(); 

działa tylko kiedy podać {poziom} własność exatcly w wiadomości dziennika.

starałem się używać:

Matching.WithProperty<LogEventLevel>("Level", l => l == LogEventLevel.Warning) 

ale to nie działa zbyt.

+0

@Kiquenet, to aplikacja WCF. –

+0

Jak rejestrować błędy i zapisywać ostrzeżenia w kodzie za pomocą Seriloga? – Kiquenet

+0

@Kiquenet, przykłady znajdują się poniżej: Komunikat o błędzie z szczegółami wyjątku: 'Log.Logger.Error (ex," Tutaj jest komunikat o błędzie z {Dane} ", niektóre dane)' Komunikat ostrzegawczy: 'Log.Logger.Warning ("Tutaj pojawia się komunikat ostrzegawczy z {Dane}", niektóre dane) ' –

Odpowiedz

7

myślę, że trzeba:

.ByIncludingOnly(evt => evt.Level == LogEventLevel.Warning) 
+0

... patrząc na to pytanie, na edycję i na ostatnie komentarze w odpowiedzi ... https: //stackoverflow.com/questions/47565008/trouble- konwertująca-serilog-konfiguracja-kod-linia-do-json-konfiguracja/47566787? noredirect = 1 # comment82106820_47566787 – dinotom

18

używam następującą konfigurację i działa dla mnie:

  Log.Logger = new LoggerConfiguration() 
        .MinimumLevel.Debug() 
        .WriteTo.LiterateConsole() 
        .WriteTo.Logger(l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information).WriteTo.RollingFile(@"Logs\Info-{Date}.log")) 
        .WriteTo.Logger(l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug).WriteTo.RollingFile(@"Logs\Debug-{Date}.log")) 
        .WriteTo.Logger(l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning).WriteTo.RollingFile(@"Logs\Warning-{Date}.log")) 
        .WriteTo.Logger(l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error).WriteTo.RollingFile(@"Logs\Error-{Date}.log")) 
        .WriteTo.Logger(l => l.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Fatal).WriteTo.RollingFile(@"Logs\Fatal-{Date}.log")) 
        .WriteTo.RollingFile(@"Logs\Verbose-{Date}.log") 
        .CreateLogger(); 
+1

Nie przegłosowałem tego pytania, ale z powodu czystego rozwiązania przedstawionego do rejestrowania różnych poziomów logów w osobnych plikach. – mok

+0

Dzięki za awans i komentarz :) –

+0

Podoba mi się ten. Jedynym pytaniem jest, jak można to przetłumaczyć na plik konfiguracyjny JSON? Próbowałem znaleźć odniesienie do składni, ale nie udało mi się tak z jakiegoś powodu. – Pritorian

Powiązane problemy