Usando serilog, estoy tratando de agregar un enriquecedor personalizado a través de appSettings.json sin éxito.
Fui exactamente por el libro, siguiendo la documentación. También seguí una introducción no oficial como estahttps://www.ctrlaltdan.com/2018/08/14/custom-serilog-enrichers/
La introducción anterior funciona bien con los enriquecedores de nuggets (como Serilog.Enrichers.Environment, Serilog.Enrichers.Thread, etc.) pero no funciona con mi enriquecedor personalizado. Aquí está el código relevante:
public class ClassNameEnricher: ILogEventEnricher { private string GetClassName() { StackTrace trace = new StackTrace(); bool foundFrame = false; int currentFrame = 0; while (!foundFrame) { if (trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName == typeof(Logger).FullName) { foundFrame = true; } currentFrame++; } return trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName; } public virtual void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) { LogEventProperty className = propertyFactory.CreateProperty("ClassName", GetClassName()); logEvent.AddPropertyIfAbsent(className); } } public static class LoggerEnrichmentConfigurationExtensions { public static LoggerConfiguration WithClassName(this LoggerEnrichmentConfiguration enrich) { return enrich.With<ClassNameEnricher>(); } }y la configuración:
Notaré que agregar mi enrihcer en el código funciona bien. ¿Cualquier sugerencia?
Tienes que incluir el nombre de tu ensamblado en la sección "Using" .
De la documentación de Serilog
La sección de uso contiene una lista de ensamblajes en los que residen los métodos de configuración (WriteTo.File(), Enrich.WithThreadId()).
Observe en ese artículo al que se refiere, que la configuración de ensamblaje está presente:
"Using": [ "Example.Assembly.Name" ]