2

我想在使用 log4net 时记录对应于日志级别的数值。也就是说,现在我正在使用以下命令文本登录到数据库:

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

   <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>

我想将日志记录级别的字符串值更改为数字。这可能吗?

4

1 回答 1

5

我没有对此进行测试,但以下应该可以工作。

您可以像这样创建自己的转换器:

sealed class NumericLevelPatternConverter : PatternLayoutConverter 
{
    override protected void Convert(TextWriter writer, LoggingEvent loggingEvent)
    {
        // maybe you need to call ToString() on the value property
        writer.Write( loggingEvent.Level.Value ); 
    }
}

并在配置文件中:

<layout type="log4net.Layout.PatternLayout">
    <converter>
        <name value="levelId" />
        <type value="YourNamespace.NumericLevelPatternConverter" />
    </converter>
    <conversionPattern value="%levelId" />
</layout>
于 2012-09-19T17:41:16.867 回答