Saltar al contenido

Serilog: registro en diferentes archivos

Al fin después de mucho luchar ya hallamos la respuesta de este contratiempo que muchos lectores de nuestra web han tenido. Si deseas compartir algún detalle no dudes en aportar tu información.

Solución:

Puede hacer esto asegurándose primero de que los eventos del contador de rendimiento estén etiquetados con un valor de propiedad particular (OpenMappedContext() en LibLog) o de un tipo/espacio de nombres en particular.

var log = LogProvider.For()
log.Info(...);

Al configurar Serilog, un registrador secundario con filtro aplicado puede enviar solo los eventos requeridos al segundo archivo.

Log.Logger = new LoggerConfiguration()
    .WriteTo.Logger(lc => lc
        .Filter.ByExcluding(Matching.FromSource("MyApp.Performance"))
        .WriteTo.File("first.json", new JsonFormatter()))
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(Matching.FromSource("MyApp.Performance"))
        .WriteTo.File("second.json", new JsonFormatter()))
    .CreateLogger();

También podemos configurarlo en los archivos de configuración. A continuación se muestra una muestra en el appsettings.json para dividir el registro de los archivos rodantes en función de los niveles


 
  "Serilog": 
    "MinimumLevel": 
      "Default": "Debug",
      "Override": 
        "Default": "Information",
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
      
    ,
    "WriteTo": [
      
        "Name": "Logger",
        "Args": 
          "configureLogger": 
            "Filter": [
              
                "Name": "ByIncludingOnly",
                "Args": 
                  "expression": "(@Level = 'Error' or @Level = 'Fatal' or @Level = 'Warning')"
                
              
            ],
            "WriteTo": [
              
                "Name": "File",
                "Args": 
                  "path": "Logs/ex_.log",
                  "outputTemplate": "Timestamp:o [Level:u3] (SourceContext) MessageNewLineException",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 7
                
              
            ]
          
        
      ,
      
        "Name": "Logger",
        "Args": 
          "configureLogger": 
            "Filter": [
              
                "Name": "ByIncludingOnly",
                "Args": 
                  "expression": "(@Level = 'Information' or @Level = 'Debug')"
                
              
            ],
            "WriteTo": [
              
                "Name": "File",
                "Args": 
                  "path": "Logs/cp_.log",
                  "outputTemplate": "Timestamp:o [Level:u3] (SourceContext) MessageNewLineException",
                  "rollingInterval": "Day",
                  "retainedFileCountLimit": 7
                
              
            ]
          
        
      
    ],
    "Enrich": [
      "FromLogContext",
      "WithMachineName"
    ],
    "Properties": 
      "Application": "MultipleLogFilesSample"
    
  

Luego, solo necesitarás modificar el CreateHostBuilder método en Program.cs archivo para leerlo desde el archivo de configuración

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            
                webBuilder.UseStartup();
            )
            .UseSerilog((hostingContext, loggerConfig) =>
                loggerConfig.ReadFrom.Configuration(hostingContext.Configuration)
            );

Para más detalles, consulte la publicación aquí

Si desea tener una canalización de registro independiente, simplemente cree otra instancia. Esto está robado y adaptado de https://github.com/serilog/serilog/wiki/Lifecycle-of-Loggers:

using (var performanceCounters = new LoggerConfiguration()
        .WriteTo.File(@"myapplog.txt")
        .CreateLogger())

    performanceCounters.Information("Performance is really good today ;-)");

    // Your app runs, then disposal of `performanceCounters` flushes any buffers

Recuerda mostrar este enunciado si te valió la pena.

¡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 *