ASP.NET Core中通过appsettings.json配置Serilog按类/任务生成独立日志文件
Serilog 按类/任务拆分独立日志文件的appsettings.json配置方案
前置依赖
你需要先在项目中安装以下NuGet包,确保配置过滤功能正常工作:
Serilog.Settings.Configuration:Serilog读取配置文件的核心包Serilog.Filters.Expressions:支持在配置文件中编写过滤表达式
完整配置示例
所有拆分逻辑均在appsettings.json中完成,无需修改C#初始化代码(需保证原有Serilog初始化代码包含.ReadFrom.Configuration(configuration)调用):
"Serilog": { "Using": [ "Serilog.Sinks.File", "Serilog.Filters.Expressions" ], "MinimumLevel": { "Default": "Warning", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ], "WriteTo": [ // 公共Seq上报sink,所有日志都会上报,不需要可删除 { "Name": "Seq", "Args": { "serverUrl": "http://localhost:5421" } }, // 特定类独立日志示例:匹配MyApp.Services.UserService类产生的日志 { "Name": "Logger", "Args": { "configureLogger": { "Filter": [ { "Name": "ByIncludingOnly", "Args": { "expression": "SourceContext = 'MyApp.Services.UserService'" } } ], "WriteTo": [ { "Name": "File", "Args": { "rollingInterval": "Day", "fileSizeLimitBytes": 10485760, "path": "c://logs/user_service_{Date}.json", "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog" } } ] } } }, // 特定任务独立日志示例:匹配携带TaskName=ImportDataTask属性的日志 { "Name": "Logger", "Args": { "configureLogger": { "Filter": [ { "Name": "ByIncludingOnly", "Args": { "expression": "TaskName = 'ImportDataTask'" } } ], "WriteTo": [ { "Name": "File", "Args": { "rollingInterval": "Day", "fileSizeLimitBytes": 10485760, "path": "c://logs/import_data_task_{Date}.json", "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog" } } ] } } }, // 剩余通用日志输出,不需要可删除 { "Name": "File", "Args": { "rollingInterval": "Day", "fileSizeLimitBytes": 10485760, "path": "c://logs/common_{Date}.json", "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog" } } ] }
使用说明
- 按类拆分场景:正常通过构造函数注入
ILogger<T>即可,Serilog会自动为日志添加SourceContext属性,属性值为对应类的全限定名,匹配配置中的过滤规则后会输出到独立文件。 - 按任务拆分场景:执行目标任务前调用
LogContext.PushProperty("TaskName", "你的任务标识"),该上下文内产生的所有日志都会携带对应TaskName属性,匹配规则后输出到独立文件。
内容的提问来源于stack exchange,提问作者SA_VL
相关产品推荐
相关产品推荐

