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

如何在Serilog中格式化结构化日志并忽略部分参数?

解决方法

Serilog没有原生支持“仅代入消息文本、不生成结构化属性”的占位符语法,但可以通过属性过滤的方式实现你要的效果,步骤如下:

1. 配置Serilog过滤规则

在初始化Serilog的代码中,添加过滤逻辑,移除名为_的日志属性:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")))
    // 过滤掉所有名为"_"的结构化属性
    .Filter.ByExcluding(logEvent => logEvent.Properties.ContainsKey("_"))
    .CreateLogger();

2. 按需求编写日志代码

直接用{_}作为不需要生成结构化属性的占位符:

_logger.LogInformation("Logging the value of {_} and {bar}", foo, bar);

效果说明

  • 日志消息文本会正常替换{_}为foo的值、{bar}为bar的值,完全不影响可读性;
  • 发送到Elasticsearch的日志文档中,只会保留bar对应的结构化属性,_对应的属性会被过滤掉,不会出现在ES里。

如果需要多个这类“仅代入不结构化”的参数,重复使用{_}即可——所有对应_的属性都会被过滤,消息文本的替换依然会按顺序正确执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:45:36