0

我想知道是否可以设置滚动文件的最大数量?

我想这样做,所以我不需要创建一个作业来清理旧的日志文件。上个月的日志就好了。

这是我目前的配置

        private static IHostBuilder CreateHostBuilder(string[] args)
        {
            var logFile = Path.Combine(_logPath, $"{_appName}_.json");
            var logFileErrors = Path.Combine(_logPath, $"{_appName}_errors_.json");
            var logFileStartUp = Path.Combine(_logPath, $"{_appName}_startup.json");

            return Host.CreateDefaultBuilder(args)
                .UseSerilog((context, provider, loggerConfig) =>
                    loggerConfig
                        .ReadFrom.Configuration(context.Configuration)
                        .Enrich.FromLogContext()
                        .Enrich.WithMachineName()
                        .Enrich.WithProperty("Assembly", $"{_appName}")
                        .Enrich.WithProperty("Version", $"{_appVersion}")
                        .WriteTo.Console(theme: AnsiConsoleTheme.Code)
                        .WriteTo.Logger(lc => lc
                            .Filter.ByIncludingOnly(e =>
                                e.Level is LogEventLevel.Warning or LogEventLevel.Error or LogEventLevel.Fatal)
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFileErrors,
                                fileSizeLimitBytes: 10485760L, rollingInterval: RollingInterval.Month,
                                rollOnFileSizeLimit: true))
                        .WriteTo.Logger(lc => lc
                            .Filter.ByIncludingOnly(e => e.Level is LogEventLevel.Information).Filter
                            .ByIncludingOnly(Matching.WithProperty("RequestId"))
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFile, fileSizeLimitBytes: 10485760L,
                                rollingInterval: RollingInterval.Month, rollOnFileSizeLimit: true))
                        .WriteTo.Logger(lc => lc
                            .Filter.ByExcluding(Matching.WithProperty("RequestId"))
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFileStartUp)))
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
        }
4

1 回答 1

0

事实证明,这是一项非常容易的任务。使用retainedFileCountLimit。下面的代码显示了它是如何使用的。

        private static IHostBuilder CreateHostBuilder(string[] args)
        {
            var logFile = Path.Combine(_logPath, $"{_appName}_.json");
            var logFileErrors = Path.Combine(_logPath, $"{_appName}_errors_.json");
            var logFileStartUp = Path.Combine(_logPath, $"{_appName}_startup.json");

            return Host.CreateDefaultBuilder(args)
                .UseSerilog((context, provider, loggerConfig) =>
                    loggerConfig
                        .ReadFrom.Configuration(context.Configuration)
                        .Enrich.FromLogContext()
                        .Enrich.WithMachineName()
                        .Enrich.WithProperty("Assembly", $"{_appName}")
                        .Enrich.WithProperty("Version", $"{_appVersion}")
                        .WriteTo.Console(theme: AnsiConsoleTheme.Code)
                        .WriteTo.Logger(lc => lc
                            .Filter.ByIncludingOnly(e =>
                                e.Level is LogEventLevel.Warning or LogEventLevel.Error or LogEventLevel.Fatal)
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFileErrors,
                                fileSizeLimitBytes: 10485760L, rollingInterval: RollingInterval.Month,
                                rollOnFileSizeLimit: true, retainedFileCountLimit: 5))
                        .WriteTo.Logger(lc => lc
                            .Filter.ByIncludingOnly(e => e.Level is LogEventLevel.Information).Filter
                            .ByIncludingOnly(Matching.WithProperty("RequestId"))
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFile, fileSizeLimitBytes: 10485760L,
                                rollingInterval: RollingInterval.Month, rollOnFileSizeLimit: true, retainedFileCountLimit: 5))
                        .WriteTo.Logger(lc => lc
                            .Filter.ByExcluding(Matching.WithProperty("RequestId"))
                            .WriteTo.File(new ElasticsearchJsonFormatter(), logFileStartUp)))
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
        }
于 2021-06-16T07:39:42.067 回答