将自定义属性绑定到Log4Net中的LoggingEvent对象



我正在使用log4net,我正在努力找出将自定义字段绑定到LoggingEvent对象的最佳方法,或者如果有,也就是AppenderSkeletonAppend覆盖方法中使用的方法。

例如,这可以是guid属性,以添加到其他属性,如levelrenderedMessage等。

然而,我计划将Log4net.Appenders.Fluentdlog4net.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源代码中如何实现的吗?

您可以使用ThreadContextLoggingEvent对象添加自定义属性,该属性被传递到AppenderSkeletonAppend覆盖方法和LayoutSkeletonFormat覆盖方法中。

设置:

ThreadContext.Properties["my_custom_prop"] = "my custom property"

然后取回:

var prop = evt.GetProperties()["my_custom_prop"].ToString();

相关内容

  • 没有找到相关文章

最新更新