Использование SQL Server Ce 4.0 с log4net - PullRequest
1 голос
/ 26 мая 2011

Я пытаюсь использовать SQL Server Compact Edition (v4.0) с log4net. Здесь отличный гид здесь . Он использует Compact Edition 3.5, но большинство шагов должны быть одинаковыми.

Итак, я создал базу данных SQL Server CE 4.0 внутри «App_Data» с таблицей «Log» в своем веб-приложении MVC и убедился, что System.Data.SqlServerCe «copy local» верно . Я также изменил строку подключения на учетную запись для папки app_data.

Мой аппендер выглядит так:

<appender name="SqlCeAppender" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe" />
    <connectionString value="Data Source=|DataDirectory|\='log4net.sdf'" />
    <commandText
    value="INSERT INTO Log 
      ([Date],[Thread],[Level],[Logger],[Message],
      [Exception], [UserName], [Custom]) 
      VALUES 
      (@log_date, @thread, @log_level, @logger, @message, 
      @exception, @username, @custom)" />
    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawUtcTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_level" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="2000" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
    <parameter>
      <parameterName value="@username" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%username" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@custom" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{Custom}" />
      </layout>
    </parameter>
  </appender>

И ... ничего не происходит - без логов. Когда я переключаюсь к своему приложению для работы с текстовыми файлами, я получаю журналы, так что это как-то связано с этим приложением, но я не знаю что. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 29 мая 2011

Я полагаю, что проблема, с которой вы столкнулись, не установлена ​​в bufferSize.Задайте для параметра bufferSize один из следующих вариантов:

<bufferSize value="1" />

Поместите это в аппендер, и все будет хорошо.

1 голос
/ 25 октября 2011

У меня была такая же проблема, но мне удалось ее решить.

Я нашел пару проблем в вашем примере:

<connectionString value="Data Source=|DataDirectory|\='log4net.sdf'" />

Должен быть изменен на:

<connectionString value="Data Source=|DataDirectory|log4net.sdf" />

И я также удалил те настраиваемые поля, которые не входят в стандартную схему таблицы log4net (имя пользователя и настраиваемая), поэтому запрос становится:

INSERT INTO Log 
      ([Date],[Thread],[Level],[Logger],[Message],
      [Exception]) 
      VALUES 
      (@log_date, @thread, @log_level, @logger, @message, 
      @exception)

И, конечно, я удалил 2 связанных <parameter> блока.

Я также добавил узел <bufferSize> в соответствии с предложением @BiggsTRC.

Тогда все заработало.

0 голосов
/ 27 мая 2011

Хорошо - я в конце концов отказался от этого и решил сделать это, написав собственный Appender, который использует Entity Framework для записи журналов - на самом деле мне это удалось, так как я могу добавить больше информации об ошибке в свой пользовательский appender.

...