将自定义属性绑定到 Log4Net 中的 LoggingEvent 对象
Bind Custom Properties to LoggingEvent Object in Log4Net
我正在使用 log4net
并且我正在尝试找出最好的方法,或者如果有的话,将自定义字段绑定到 LoggingEvent
对象,该对象在 Append
覆盖 AppenderSkeleton
的方法。
例如,这可以是 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
将自定义 属性 添加到传递给 AppenderSkeleton
的 Append
覆盖方法的 LoggingEvent
对象以及 LayoutSkeleton
.
的 Format
覆盖方法
设置它:
ThreadContext.Properties["my_custom_prop"] = "my custom property"
然后取回:
var prop = evt.GetProperties()["my_custom_prop"].ToString();
我正在使用 log4net
并且我正在尝试找出最好的方法,或者如果有的话,将自定义字段绑定到 LoggingEvent
对象,该对象在 Append
覆盖 AppenderSkeleton
的方法。
例如,这可以是 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
将自定义 属性 添加到传递给 AppenderSkeleton
的 Append
覆盖方法的 LoggingEvent
对象以及 LayoutSkeleton
.
Format
覆盖方法
设置它:
ThreadContext.Properties["my_custom_prop"] = "my custom property"
然后取回:
var prop = evt.GetProperties()["my_custom_prop"].ToString();