2017-02-22 2 views
1

Ich habe ASP.NET MVC-Anwendung und benutze Serilog für die Protokollierung Zweck. Ich habe serilog der enricher implementiertSerilog Enricher protokolliert keine Eigenschaften

public class HttpContextEnricher : ILogEventEnricher 
{ 
    LogEventProperty _cachedProperty; 

    public const string EnvironmentUserNamePropertyName = "MyUserName"; 

    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) 
    { 
     if (HttpContext.Current == null) 
      return; 
     if (HttpContext.Current.User == null) 
      return; 
     if (HttpContext.Current.User.Identity == null) 
      return; 

     _cachedProperty = _cachedProperty ?? propertyFactory.CreateProperty(EnvironmentUserNamePropertyName, HttpContext.Current.User.Identity.Name); 
     logEvent.AddPropertyIfAbsent(_cachedProperty); 
    } 
} 

Erweiterungsmethode für jeden Protokolleintrag Benutzernamen des Benutzers anmelden

public static class HttpContextLoggerConfigurationExtensions 
{ 
    public static LoggerConfiguration WithUserName(
     this LoggerEnrichmentConfiguration enrichmentConfiguration) 
    { 
     if (enrichmentConfiguration == null) throw new ArgumentNullException(nameof(enrichmentConfiguration)); 
     return enrichmentConfiguration.With<HttpContextEnricher>(); 
    } 
} 

es bei Anwendung konfiguriert starten

 Log.Logger = new LoggerConfiguration() 
      .Enrich.WithUserName()      
      .ReadFrom.AppSettings() 
      .CreateLogger(); 

Hier ist meine App-Einstellungen

Dies ist, wie ich bin Anmeldung

Log.Information("Some information messaage"); 

ich WindowsEvent Sink verwende. Wenn ich die Anwendung ausführe, sehe ich, dass die Nachricht in der Ereignisquelle des Windows geloggt wird, jedoch hat das Protokoll keine Eigenschaft MyUserName.

Ich bin mir nicht sicher, was ich hier vermisse?

+0

Was passiert, wenn Sie einen Haltepunkt in Ihre 'Enrich()' Methode setzen? –

+0

Ich sehe es gibt den gültigen Benutzernamen – LP13

+0

Ah, kann es nur sein, dass die Ereignisprotokollsenke nicht alle Eigenschaften im Ereignis auflistet? Sie könnten versuchen, z. JSON in eine Datei und sehen, ob die Eigenschaften dort sind: https://github.com/serilog/serilog-formatting-compact#getting-started - HTH! –

Antwort

0

Ich musste UserName in outputTemplate explizit festlegen, damit es in Senke schreiben kann.

<add key="serilog:write-to:EventLog.outputTemplate" value="[{Level}]{NewLine}{Timestamp:MM/dd/yyyy HH:mm:ss tt}{NewLine}UserName:{MyUserName}{NewLine}Message:{Message}{NewLine}{Exception}" /> 
Verwandte Themen