我正在使用log4net
,我正在努力找出将自定义字段绑定到LoggingEvent
对象的最佳方法,或者如果有,也就是AppenderSkeleton
的Append
覆盖方法中使用的方法。
例如,这可以是guid
属性,以添加到其他属性,如level
、renderedMessage
等。
然而,我计划将Log4net.Appenders.Fluentd
与log4net.Ext.Json
一起使用,因此xml
中的appender看起来像这样:
<appender name="Fluentd" type="Log4net.Appenders.Fluentd.FluentdAppender, Log4net.Appenders.Fluentd">
<Host>127.0.0.1</Host>
<Port>24224</Port>
<Tag>YourTagHere</Tag>
<NoDelay>false</NoDelay>
<ReceiveBufferSize>8192</ReceiveBufferSize>
<SendBufferSize>8192</SendBufferSize>
<SendTimeout>1000</SendTimeout>
<ReceiveTimeout>1000</ReceiveTimeout>
<LingerEnabled>true</LingerEnabled>
<LingerTime>1000</LingerTime>
<EmitStackTraceWhenAvailable>true</EmitStackTraceWhenAvailable>
<IncludeAllProperties>false</IncludeAllProperties>
<!--json formatted log4net logging-->
<layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
<decorator type="log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json" />
<member value="date:date" />
<member value="level:level" />
<member value="message:messageObject" />
</layout>
</appender>
我希望最后会有这样的事情:
<!--json formatted log4net logging-->
<layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json">
<decorator type="log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json" />
<member value="date:date" />
<member value="level:level" />
<member value="message:messageObject" />
<member value="guid:guid" />
</layout>
这是我要在Log4net.Appenders.Fluentd
源代码中如何实现的吗?
您可以使用ThreadContext
向LoggingEvent
对象添加自定义属性,该属性被传递到AppenderSkeleton
的Append
覆盖方法和LayoutSkeleton
的Format
覆盖方法中。
设置:
ThreadContext.Properties["my_custom_prop"] = "my custom property"
然后取回:
var prop = evt.GetProperties()["my_custom_prop"].ToString();