记录log4net数字级别值

oli*_*lif 2 log4net

我想在使用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>
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*gli 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 ); 
    }
}
Run Code Online (Sandbox Code Playgroud)

并在配置文件中:

<layout type="log4net.Layout.PatternLayout">
    <converter>
        <name value="levelId" />
        <type value="YourNamespace.NumericLevelPatternConverter" />
    </converter>
    <conversionPattern value="%levelId" />
</layout>
Run Code Online (Sandbox Code Playgroud)