You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Нуркен Зулпыхаров

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:50:30