C# 如何通过记录器改变appender的行为

C# 如何通过记录器改变appender的行为,c#,log4net,log4net-configuration,C#,Log4net,Log4net Configuration,我有一个appender,它调用存储过程来编写日志记录。它看起来是这样的(为简洁起见进行了修剪): 注意消息参数的大小字段设置为40000 我有一个记录器,但我需要的消息长度更长。如何更改特定记录器的此设置。我尝试克隆LogAppender并更改大小值,如下所示: <log4net> <root> <level value="WARN" /> <appender-ref ref="LogAppender" /> <

我有一个appender,它调用存储过程来编写日志记录。它看起来是这样的(为简洁起见进行了修剪):


注意消息参数的大小字段设置为40000

我有一个记录器,但我需要的消息长度更长。如何更改特定记录器的此设置。我尝试克隆LogAppender并更改大小值,如下所示:

<log4net>
  <root>
    <level value="WARN" />
    <appender-ref ref="LogAppender" />
  </root>
  <logger name="SpecialLogger">
    <level value="INFO" />
    <appender-ref ref="SpecialLogAppender" />
  </logger>
  <appender name="LogAppender" type="LoggerAssembly.Appender, LoggerAssembly">
    <bufferSize value="1" />
    <reconnectonerror value="True" />
    <parameter>
      <parameterName value="@EntryDate" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="40000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
  </appender>
  <appender name="SpecialLogAppender" type="LoggerAssembly.Appender, LoggerAssembly">
    <bufferSize value="1" />
    <reconnectonerror value="True" />
    <parameter>
      <parameterName value="@EntryDate" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="400000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
  </appender>
</log4net>


但这会导致来自SpecialLogger的消息被记录两次,一次由LogAppender记录,一次由SpecialLogAppender记录。有什么想法吗?

您需要在特殊记录器定义中添加
additivity=“false”

<logger name="SpecialLogger" additivity="false">
  <level value="INFO" />
  <appender-ref ref="SpecialLogAppender" />
</logger>

您需要将合适的
元素添加到log4net appender中。看

Log4net appender是按文档顺序检查的,因此您的特殊appender需要位于默认appender之前。那么,像这样的事情应该发生在你身上:

<appender name="SpecialAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="your-logger-name-here">
    <acceptOnMatch="true"
  </filter>
  <layout type="log4net.Layout.SimpleLayout" />
</appender>
<appender name="DefaultAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="your-logger-name-here">
    <acceptOnMatch="false"
  </filter>
  <layout type="log4net.Layout.SimpleLayout" />
</appender>


可加性是这个属性的一个可怕的名称。我不觉得难过,我没看见。谢谢我希望我能把两个答案标为正确。making3是最简单的,它解决了我的问题,但是如果我有更多这样的改变,你的方法会更灵活。谢谢
<appender name="SpecialAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="your-logger-name-here">
    <acceptOnMatch="true"
  </filter>
  <layout type="log4net.Layout.SimpleLayout" />
</appender>
<appender name="DefaultAppender" type="log4net.Appender.FileAppender">
  <file value="log.txt" />
  <filter type="log4net.Filter.LoggerMatchFilter">
    <loggerToMatch value="your-logger-name-here">
    <acceptOnMatch="false"
  </filter>
  <layout type="log4net.Layout.SimpleLayout" />
</appender>