>我有一个追加器,它调用存储过程来写入日志记录。它看起来像这样(为简洁起见进行了修剪):
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="ElsAppender" />
</root>
<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>
</log4net>
请注意,消息参数的大小字段设置为 40,000。
我有一个记录器,但是我需要更长的消息长度。如何更改该特定记录器的此设置。我尝试克隆 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 追加器添加一个合适的<filter>
元素。看
- http://logging.apache.org/log4net/release/manual/configuration.html#filters
- http://logging.apache.org/log4net/release/sdk/log4net.Filter.html
- http://logging.apache.org/log4net/release/sdk/index.html
Log4net 追加器按文档顺序进行检查,因此您的特殊追加器需要在默认追加器之前。那么像这样的事情应该做哟:
<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>