如何配置ASP.NET Core中Serilog实现日志文件按_001、_002序号依次命名
结论
完全可以实现该需求,Serilog的Serilog.Sinks.File sink原生支持按文件大小滚动生成带有序号后缀的日志文件,完全符合你要求的命名规则。
实现步骤
首先安装必要的NuGet包:
- Serilog ASP.NET Core核心集成包:
Serilog.AspNetCore - 文件写入sink包:
Serilog.Sinks.File(最新稳定版已原生支持序号滚动命名规则)
方式1:代码硬编码配置
在项目启动文件Program.cs中直接配置Serilog规则即可:
using Serilog; var builder = WebApplication.CreateBuilder(args); // 初始化Serilog配置 Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.File( path: "logs/myapp.log", // 基础日志文件前缀,不需要手动加序号占位符 rollOnFileSizeLimit: true, // 开启按文件大小触发滚动规则 fileSizeLimitBytes: 10 * 1024 * 1024, // 单个日志文件上限为10MB,可按需调整 rollingInterval: RollingInterval.Infinite, // 不按时间周期滚动,仅按大小触发新文件生成 retainedFileCountLimit: 30, // 最多保留30个历史日志文件,设为null则不限制保留数量 outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" ) .CreateLogger(); // 替换ASP.NET Core默认日志组件为Serilog builder.Host.UseSerilog(); // 其余服务注册逻辑 // ... var app = builder.Build(); // 中间件配置逻辑 // ... app.Run();
按以上配置生成的日志文件命名依次为myapp_001.log、myapp_002.log、myapp_003.log,完全符合需求。
方式2:通过appsettings.json配置(更推荐,无需修改代码即可调整规则)
- 先修改
Program.cs的Serilog初始化逻辑,改为从配置文件读取规则:
using Serilog; var builder = WebApplication.CreateBuilder(args); // 从配置文件加载Serilog规则 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .CreateLogger(); builder.Host.UseSerilog(); // 其余逻辑 // ... var app = builder.Build(); app.Run();
- 在
appsettings.json中添加Serilog配置段:
{ "Serilog": { "MinimumLevel": "Information", "WriteTo": [ { "Name": "File", "Args": { "path": "logs/myapp.log", "rollOnFileSizeLimit": true, "fileSizeLimitBytes": 10485760, "rollingInterval": "Infinite", "retainedFileCountLimit": 30, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" } } ] } }
注意事项
- 如果需要同时按时间+大小滚动,比如每天的日志按大小拆分,把
rollingInterval改为对应值即可,比如Day,此时命名会变为myapp20240520_001.log,仍然保留序号后缀规则 fileSizeLimitBytes单位为字节,可根据业务需求调整大小上限- 如果需要保留所有历史日志,把
retainedFileCountLimit设为null即可
内容的提问来源于stack exchange,提问作者PaulN
相关产品推荐
相关产品推荐

