如何在代码中为Serilog传入Azure Storage连接字符串并读取appSettings.json配置
如何在代码中为Serilog的Azure Blob存储接收器注入连接字符串
你的appsettings.json中已配置Serilog的基础规则,包括Azure Blob存储接收器的参数,但未包含Azure存储连接字符串,想要在代码读取配置后补充该连接字符串,有两种可行的实现方式:
方法1:手动添加带连接字符串的接收器
先读取配置中的接收器参数,移除配置里已有的Azure Blob接收器(避免重复输出),再手动添加带连接字符串的接收器:
// 从配置中提取Azure Blob接收器的参数 var blobSinkSection = builder.Configuration.GetSection("Serilog:WriteTo") .GetChildren() .FirstOrDefault(sink => sink.GetValue<string>("Name") == "AzureBlobStorage")? .GetSection("Args"); // 构建Logger配置 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) // 移除配置中已定义的Azure Blob接收器 .WriteTo.Remove(sink => sink is Serilog.Sinks.AzureBlobStorage.AzureBlobStorageSink) // 手动添加带连接字符串的接收器,复用配置中的其他参数 .WriteTo.AzureBlobStorage( connectionString: "你的Azure存储连接字符串", // 建议从环境变量/密钥管理服务读取 storageContainerName: blobSinkSection.GetValue<string>("storageContainerName"), storageFileName: blobSinkSection.GetValue<string>("storageFileName"), writeInBatches: blobSinkSection.GetValue<bool>("writeInBatches"), period: blobSinkSection.GetValue<TimeSpan>("period"), batchPostingLimit: blobSinkSection.GetValue<int>("batchPostingLimit") ) .CreateLogger();
方法2:直接修改配置节点注入连接字符串
先在appsettings.json的Azure Blob接收器Args中添加空的connectionString字段:
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.AzureBlobStorage" ], "MinimumLevel": { "Default": "Verbose" }, "WriteTo": [ { "Name": "Console" }, { "Name": "AzureBlobStorage", "Args": { "connectionString": "", "storageContainerName": "applogs", "storageFileName": "{yyyy}/{MM}/{dd}/log.txt", "writeInBatches": "true", "period": "0.00:00:15", "batchPostingLimit": "10" } } ] }
然后在代码中修改该配置节点的值,再读取配置构建Logger:
// 注入连接字符串到配置节点 builder.Configuration.GetSection("Serilog:WriteTo:1:Args:connectionString") .Value = "你的Azure存储连接字符串"; // 建议从安全源读取 Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .CreateLogger();
注意事项
- 不要硬编码连接字符串,优先从环境变量、Azure Key Vault等安全配置源读取
- 方法2中注意
WriteTo:1的索引对应配置中Azure Blob接收器的位置,若配置顺序调整需同步修改索引,也可通过遍历节点的方式定位,避免索引依赖
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

