Saltar al contenido

¿Cómo hago para que un enriquecedor de serilog funcione con la inyección de dependencias mientras lo mantengo en el inicio?

Hola, descubrimos la respuesta a tu interrogante, desplázate y la encontrarás aquí.

Solución:

Sugeriría usar un middleware simple que inserte en la canalización de ASP .NET Core, para enriquecer LogContext de Serilog con los datos que desea, usando las dependencias que necesita, permitiendo que la inyección de dependencia de ASP .NET Core resuelva las dependencias por usted. .

por ejemplo, suponiendo IUserDataService es un servicio que puede usar para obtener los datos que necesita, para enriquecer el registro, el middleware se vería así:

public class UserDataLoggingMiddleware

    private readonly RequestDelegate _next;

    public UserDataLoggingMiddleware(RequestDelegate next)
    
        _next = next;
    

    public async Task Invoke(HttpContext context, IUserDataService userDataService)
    
        var userData = await userDataService.GetAsync();

        // Add user data to logging context
        using (LogContext.PushProperty("UserData", userData))
        
            await _next.Invoke(context);
        
    

LogContext.PushProperty anterior está haciendo el enriquecimiento, agregando una propiedad llamada UserData al contexto de registro de la ejecución actual.

ASP .NET Core se encarga de resolver IUserDataService siempre y cuando lo hayas registrado en tu Startup.ConfigureServices.

Por supuesto, para que esto funcione, tendrás que:

1. Dígale a Serilog que enriquezca el registro desde el contexto de registro, llamando Enrich.FromLogContext(). p.ej

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(Configuration)
    .Enrich.FromLogContext() // <<======================
    .WriteTo.Console(
        outputTemplate: "[Timestamp:HH:mm:ss Level:u3] Message:lj " +
                        "Properties:jNewLineException")
    .CreateLogger();

2. Agregue su middleware a la canalización, en su Startup.Configure. p.ej

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    // ...

    app.UseMiddleware();

    // ...

    app.UseMvc();

Ten en cuenta dar visibilidad a este enunciado si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *