web-dev-qa-db-fra.com

Serilog RollingFile

J'essaie d'utiliser WriteTo.RollingFile avec Serilog comme suit:

var log = new LoggerConfiguration().WriteTo.RollingFile(
                    @"F:\logs\log-{Date}.txt",
                    LogEventLevel.Debug).CreateLogger();
            log.Information("this is a log test");

Ma compréhension est que le fichier journal sera créé et nommé en fonction de la date, et qu'il écrira également dans un nouveau fichier tous les jours, mais je reçois un nouveau fichier journal pour chaque entrée de journal au cours de la même journée! Comment configurer Serilog pour écrire dans un nouveau fichier chaque jour, donc idéalement, j'ai un seul fichier journal par jour?

Et existe-t-il un processus d'archivage pour supprimer les fichiers de plus de 7 jours?

12
TechNerd

Essayez ci-dessous:

 var log = new LoggerConfiguration()
          .MinimumLevel.Debug()
          .WriteTo.RollingFile(@"f:\log\log.txt", retainedFileCountLimit:7) 
          .CreateLogger();

Le nom du fichier journal sera automatiquement log-20150819.txt etc. Vous n'avez pas besoin de spécifier la date.

22
Infinity Challenger

Maintenant en 2018, la norme Serilog.Sinks.File Le package NuGet prend en charge le roulement:

.WriteTo.File(@"e:\logs\skilliam.log", rollingInterval: RollingInterval.Day,
    rollOnFileSizeLimit: true, fileSizeLimitBytes: 123456);
8
Mohammed Noureldin

En guise de suivi, assurez-vous d'utiliser ensuite l'instance "Log" de portée globale.

Exemple:

Log.Information("Hello world");
2
Matt

Pour utiliser le même fichier, vous devez ajouter shared: true

.WriteTo.RollingFile ("log- {Date} .txt", partagé: vrai)

1
Diego

Voici une façon d'utiliser Serilog avec un web.config dans une application asp.net MVC 4/5.

Dans votre web.config, ajoutez ce qui suit:

<add key="serilog:minimum-level" value="Information" />
<add key="serilog:minimum-level:override:Microsoft" value="Information" />
<add key="serilog:minimum-level:override:System" value="Information" />
<add key="serilog:using:RollingFile" value="Serilog.Sinks.RollingFile" />
<add key="serilog:write-to:RollingFile.pathFormat" value="./Logs/log-{Date}.txt" />
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] [{SourceContext}] {Message}{NewLine}{Exception}" />
<add key="serilog:write-to:RollingFile.retainedFileCountLimit" value="10" />

Puis dans Application_Start de global.asax ajoutez ce qui suit:

// Get application base directory
string basedir = AppDomain.CurrentDomain.BaseDirectory;

// Setup Serilog for logging
Log.Logger = new LoggerConfiguration()
            .ReadFrom.AppSettings()
            .WriteTo.RollingFile(basedir + "/Logs/log-{Date}.txt")
            .CreateLogger();
1
codecypher

Pour activer les fichiers journaux partagés multi-processus, définissez shared sur true:

dans du code

.WriteTo.RollingFile("log-{Date}.txt", shared: true)

ou dans web.config

<add key="serilog:write-to:RollingFile.shared" value="true" />
0
Stefan Varga