删除Log4net(null):条件输出
我试图抑制“(null)”输出。如果我有这种转换模式:删除Log4net(null):条件输出,log4net,Log4net,我试图抑制“(null)”输出。如果我有这种转换模式: %property{MyProp} …如果MyProp为null,则输出为: (null) 在大多数情况下,这是好的。但是如果我不想输出“(null)”呢?这能做到吗 如果我的转换模式如下所示,问题会变得更有趣: MY_PROP=%property{MyProp} 在这种情况下,即使我找到了抑制“(null)”的方法,我的输出仍然是: MY_PROP= 理想情况下,如果值为null,我希望抑制与“我的道具”相关的所有内容。如果我发明
%property{MyProp}
…如果MyProp为null,则输出为:
(null)
在大多数情况下,这是好的。但是如果我不想输出“(null)”呢?这能做到吗
如果我的转换模式如下所示,问题会变得更有趣:
MY_PROP=%property{MyProp}
在这种情况下,即使我找到了抑制“(null)”的方法,我的输出仍然是:
MY_PROP=
理想情况下,如果值为null,我希望抑制与“我的道具”相关的所有内容。如果我发明了自己的语法,它可能是:
%(MyProp,MY_PROP=%MyProp)
如果第一个参数为null,这将使log4net抑制在第二个参数中指定的转换模式
撇开我的思绪不谈,在log4net中有没有真正的方法可以做到这一点呢?一种方法是创建一个自定义的
PatternLayoutConverter
。如果属性值为null
编写customNullReplacement
(如果需要一些动态性,甚至可以基于选项
键)
然后,使用Log4Net配置(下面是基于XML的配置示例)上的
标记定义此转换器,并在转换模式上使用它:
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="customNullProp" />
<type value="LogUtils.CustomNullProperty, DLLNAME" />
</converter>
<conversionPattern value="customNullProp{PropertyName} %message%newline"/>
</layout>
还有其他方法,比如为System.Object
创建渲染器,但我发现这种方法更明确
对于第二个需求,使用自定义转换器,只需在自定义转换器
编写器中移动前缀即可
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="customNullProp" />
<type value="LogUtils.CustomNullProperty, DLLNAME" />
</converter>
<conversionPattern value="customNullProp{PropertyName} %message%newline"/>
</layout>