ASP.NET Core 6 Web API如何配置Serilog按日期目录存储日志
如何通过Serilog配置文件实现按日期目录存储日志
我负责的项目是ASP.NET Core 6 Web API,选用Serilog作为日志组件,要求从JSON配置文件读取配置,将日志按日期分组存储到对应目录(如2023-01-23\server.log)。当前配置中path字段的{yyyy-MM-dd}未生效,RollingInterval:Day仅生成带日期后缀的文件名(如server20230223.log)。现有Serilog配置、引用包及项目集成代码如下,请问能否通过Serilog配置文件实现需求?
现有配置
{ "Name": "Logger", "Args": { "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact", "configureLogger": { "WriteTo": [ { "Name": "File", "Args": { "path": "C:\\LogFiles\\{yyyy-MM-dd}\\server.log", "rollingInterval": "Day", "rollOnFileSizeLimit": true, "fileSizeLimitBytes": 100000000, "retainedFileCountLimit": null, "shared": true, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}|{Level:u3}|{CorrelationId}| {Message:lj}{NewLine}{Exception}" } } ] } } }
引用包
<PackageReference Include="Serilog.AspNetCore" Version="6.1.0" /> <PackageReference Include="Serilog.Enrichers.CorrelationId" Version="3.0.1" /> <PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" /> <PackageReference Include="Serilog.Expressions" Version="3.4.1" /> <PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" /> <PackageReference Include="Serilog.Formatting.Compact" Version="1.1.1-dev-00944" /> <PackageReference Include="Serilog.Settings.Configuration" Version="3.4.0" /> <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" /> <PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
项目集成代码
var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddJsonFile("serilog.json", true, false); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .Enrich.FromLogContext() .Enrich.WithCorrelationIdHeader(StringConstants.CorrelationId) .CreateLogger(); builder.Host.UseSerilog();
可以通过配置文件实现需求,问题核心是path字段的日期占位符格式错误。Serilog.Sinks.File支持在路径中使用{Date:yyyy-MM-dd}作为日期目录占位符,结合rollingInterval: Day配置就能实现按日期目录存储日志的效果。
修改后的配置
{ "Name": "Logger", "Args": { "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact", "configureLogger": { "WriteTo": [ { "Name": "File", "Args": { "path": "C:\\LogFiles\\{Date:yyyy-MM-dd}\\server.log", "rollingInterval": "Day", "rollOnFileSizeLimit": true, "fileSizeLimitBytes": 100000000, "retainedFileCountLimit": null, "shared": true, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}|{Level:u3}|{CorrelationId}| {Message:lj}{NewLine}{Exception}" } } ] } } }
关键说明
{Date:yyyy-MM-dd}是Serilog.Sinks.File官方支持的路径占位符,会根据日志时间戳自动生成对应格式的日期目录。rollingInterval: Day会触发每日切换日志文件,同时当单文件大小超过fileSizeLimitBytes时,会在当前日期目录下生成带序号的日志文件(如server_001.log)。- 你当前使用的Serilog.Sinks.File 5.0.0版本完全支持该特性,无需升级包。
内容的提问来源于stack exchange,提问作者Нуркен Зулпыхаров
相关产品推荐
相关产品推荐

