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

如何在代码中为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:22:48