Log4net не будет регистрироваться в базе данных с помощью AdoNetAppender MVC

Я новичок в регистраторе log4net и пытаюсь создать регистратор с помощью AdoNetAppender для сохранения журналов в базе данных.

Когда я использую простой макет

<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />

и для сохранения в базу данных:

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
    </layout>
</parameter>

Он успешно сохраняет в базу данных; проблема в том, что мне нужно зарегистрировать больше деталей (местоположение, метод, строка), но это не удается сохранить в базе данных.

Для этого я использовал следующую конфигурацию:

    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%date [%thread] %-5level %logger %location 
    %method %line - %message %newline" />
   </layout>

И для вставки базы данных:

    <commandText value="INSERT INTO Log( [Date],[Thread],[Level],[Logger], 
    [Locaotion],[Method],[Line],[Message],[Exception]) 
                    VALUES (@log_date, @thread, @log_level, 
    @logger,@location @method, @line,  @message, @exception)" />
     <parameter>
  <parameterName value="@location" />
  <dbType value="String" />
  <size value="255" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%location" />
  </layout>
  </parameter>

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

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

Мой код С#:

private static ILog log = LogManager.GetLogger(typeof(HomeController));
//private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Как я могу сохранить полную информацию об ошибке в базе данных?


person shima    schedule 05.11.2018    source источник


Ответы (1)


Я получаю сообщение об ошибке, которое я забыл (,) в коде вставки базы данных, и я добавляю Application_Error в глобальный

Код конверсии:

    <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%location] [%method] [%line] - %message %newline" />
  </layout>

код вставки базы данных:

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

и для глобального кода:

    private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication));

    private void Application_Error(Object sender, EventArgs e)
    {
        var ex = Server.GetLastError().GetBaseException();

        log.Error("App_Error", ex);
    }
person shima    schedule 06.11.2018