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

如何在appsettings的Serilog配置段中引用其他appsettings配置值?

问题

使用Serilog.Settings.Configuration(可能还需Serilog.Expressions)组件时,能否在appsettings的Serilog配置段中引用其他配置值?我希望动态设置BrowserHttp接收器的endpointUrl,无需重复BaseUrl值或在appsettings外部指定该值。

Serilog.Settings.Configuration的README文档中有关于IConfiguration参数的章节,但未提供对应场景的示例。我尝试了多种写法均无法正确设置该值,仅硬编码重复值的方式可行,具体尝试的配置如下:

"App": {
  "BaseUrl": "https://localhost:1234"
},
"Serilog": {
  "Using": [ "Serilog.Sinks.BrowserConsole", "Serilog.Sinks.BrowserHttp", "Serilog.Expressions" ],
  "WriteTo": [
    {
      "Name": "BrowserHttp",
      "Args": {
        // 这个写法有效
        //"endpointUrl": "https://localhost:1234/ingest"

        // 以下写法均无效:
        //"endpointUrl": "{Concat(App.BaseUrl, '/ingest')}"
        //"endpointUrl": "{App.BaseUrl}/ingest"
        //"endpointUrl": "{App:BaseUrl}/ingest"
        //"endpointUrl": "{BaseUrl}/ingest"
        //"endpointUrl": "{AppSettings:App:BaseUrl}/ingest"
        //"endpointUrl": "App.BaseUrl/ingest"
      }
    }
  ]
}
解决方案

要在Serilog配置中引用其他appsettings值,需借助Serilog.Expressions的表达式语法,具体配置方式如下:

  1. 确保已安装Serilog.Expressions包(你已在Using节点中声明该组件,此条件已满足)
  2. 用%包裹表达式内容,通过Configuration()函数读取目标配置节点
  3. 直接拼接字符串完成endpointUrl的组合

修改后的有效配置写法:

"endpointUrl": "%Configuration('App:BaseUrl')/ingest%"

如果需要处理更复杂的拼接逻辑(比如兼容BaseUrl末尾带/或不带/的情况),可以使用Concat函数:

"endpointUrl": "%Concat(TrimEnd(Configuration('App:BaseUrl'), '/'), '/ingest')%"

原理:Serilog.Settings.Configuration会识别%包裹的Serilog表达式,通过Configuration()函数可直接读取当前IConfiguration中的任意节点值,彻底避免硬编码重复配置项。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:03:39