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
相关产品推荐
相关产品推荐

