8 votes

Serilog `rollOnFileSizeLimit` ne fonctionne pas avec le fichier de configuration

Lorsque vous configurez Serilog par un fichier de configuration (avec le paquet nuget Serilog.Settings.Configuration ), il ne crée pas de fichier journal roulant lorsque la taille limite est atteinte.

Comme suggéré dans cette question y cette question J'utilise Serlog.Sinks.File (version 4.0.0), mais le fichier roulant n'est pas créé.

Voici mon fichier de configuration serilog appsettings.json :

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.File",
      "Serilog.Sinks.Console"
    ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "%LogPath%\\Logs\\log.txt",
          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": 20,
          "rollingInterval": "Day",
          "fileSizeLimitBytes": 10000
        }
      },
      {
        "Name": "Console"
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName" ],
    "Destructure": [
    ],
    "Properties": {
    }
  }
}

Voici le code que j'utilise Serilog pour lire la configuration :

//previous code ommited... 
.ConfigureAppConfiguration((hostContext, configApp) =>
                {
                    Environment.SetEnvironmentVariable("LogPath", AppDomain.CurrentDomain.BaseDirectory);
                    configApp.AddJsonFile("appsettings.json", optional: false);

                    configApp.AddEnvironmentVariables();
                    configApp.AddCommandLine(args);
                })
                .UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration
                        .ReadFrom.Configuration(hostingContext.Configuration);
                         .WriteTo.Console();
                })

Lorsque la taille du fichier atteint 10KB, il cesse de croître, et aucun nouveau fichier journal n'est créé. BTW, le roulement par jour fonctionne toujours.

J'ai également vérifié en configurant Serilog par code, et ça marche, donc je pense que ce n'est pas lié à l'évier...

Voici le code qui fonctionne

 .UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration.MinimumLevel.Debug()
                            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
                            .Enrich.FromLogContext()
                            .WriteTo.File(path: Path.Combine(Environment.CurrentDirectory, "Logs", "log.txt"),
                                rollOnFileSizeLimit: true,
                                retainedFileCountLimit: 20,
                                rollingInterval: RollingInterval.Day,
                                fileSizeLimitBytes: 10000
                                )
                            .WriteTo.Console();
                })

Alors comment faire pour que Serilog crée un fichier roulant lorsque la taille du fichier est atteinte par le fichier de configuration ?

10voto

mosakashaka Points 335

J'ai téléchargé et débogué avec le Serilog.Settings.Configuration le code source, et j'ai découvert que j'ai fait une erreur stupide ici. Le nom du paramètre sans effet dans le fichier de configuration a un espace supplémentaire.

          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": 20,

devrait être

          "rollOnFileSizeLimit": true,
          "retainedFileCountLimit": 20,

Après avoir corrigé cela, tout fonctionne.

Je suppose que le projet devrait peut-être rogner les espaces avant de faire correspondre les clés...

-1voto

Faites attention en tapant. Auparavant, vous avez ajouté un point-virgule, et ça ne compile pas de cette façon :

loggerConfiguration
    .ReadFrom.Configuration(hostingContext.Configuration)**;**
    .WriteTo.Console();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X