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

log4net结合Gelf Appender向Graylog传输时RequestId值为NULL

GelfUdpAppender中%property{RequestId}显示为(null)的解决办法

直接修改GelfLayout的配置方式,将逗号分隔的AdditionalFields字符串替换为独立的<additionalField>节点:

<appender name="GelfUdpAppender" type="Gelf4Net.Appender.GelfUdpAppender, Gelf4Net">
  <remoteAddress value="..." /> 
  <remotePort value="12201" />
  <layout type="Gelf4Net.Layout.GelfLayout, Gelf4Net">
    <additionalField key="Level" value="%level" />
    <additionalField key="RequestId" value="%property{RequestId}" />
    <additionalField key="Thread" value="%thread" />
  </layout>
</appender>

原因说明

你当前使用的逗号分隔式AdditionalFields配置,Gelf4Net的解析逻辑无法正确处理%property{RequestId}这类转换符,导致无法读取ThreadContext中已设置的RequestId值。而DebugAppender能正常显示,是因为它使用了自定义的LoggingPatternLayout,其解析逻辑与GelfLayout的字符串解析逻辑不同。

改用独立<additionalField>节点后,每个字段的转换模式会被单独解析,能正确识别并读取log4net ThreadContext中的属性值。你也可以用%X{RequestId}替代%property{RequestId},两者功能等价,都是读取ThreadContext属性的标准转换符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:20:12