log4net с SQL Server CE не сохраняет данные в таблицу

Редактировать 2

То, что я узнал сейчас, очень странно. Когда я включаю неуправляемое исключение в Visual Studio, я получаю исключение формата при попытке

log4net.Config.XmlConfigurator.Configure(new System.Uri(config));

Я добавил некоторые параметры в свою вставку и добавил больше значений

      <commandText
              value="INSERT INTO [Log] 
              ([Message], [Name]) 
              VALUES 
              (@log_level, @message)" />

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

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

Кажется, что если я удаляю свои теги dbType в разделах параметров, в моем коде это происходит немного дольше. Однако тогда я получаю исключение формата при попытке войти. Если я удаляю один из параметров (поэтому я вставляю только одно значение), он регистрируется. Я попытался вставить только одно значение за раз (сообщение или log_level), и он работает нормально, но вместе он ломается.

Если я только вставляю фиктивные данные непосредственно в мой config-sql, это работает с обоими значениями. Так что, кажется, что-то очень странное происходит с log4Net.

Любой idvise ценится!

конец редактировать 2

редактировать

После некоторых проб и ошибок и помощи я изменил размер буфера с 100 на 0. Похоже, что возникла некоторая проблема с исправлением SDF-файла.

После перезапуска моего устройства на моей виртуальной машине я получаю ошибку журнала, когда мой путь к sed-файлу неверен. Однако, когда я получаю это правильное значение a, при попытке войти в файл появляется сообщение об ошибке "Удаленное соединение с устройством потеряно. Пожалуйста, проверьте подключение устройства и перезапустите отладку".

Конец редактирования

Я пытаюсь записать некоторые вещи в базу данных SQL Server CE на моем устройстве WindowsCE. Когда я вхожу в файл все идет как надо, но при использовании AdoNetAppender это не сработает.

Мой log4net.config выглядит так:

<appender name="SQLCEAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="0"/>
  <connectionType value="System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe" />
  <commandText
    value="INSERT INTO [Loging2] 
    ([Val]) 
    VALUES 
    ('1')" />
  <filter type="log4net.Filter.LevelRangeFilter">
    <acceptOnMatch value="true" />
    <levelMin value="INFO" />
    <levelMax value="INFO" />
  </filter>
</appender>

<!-- Define some output appenders -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Log.log" />
  <appendToFile value="true" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="100KB" />
  <rollingStyle value="Size" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <header type="log4net.Util.PatternString">
      <conversionPattern value="[Header %property{windowsversion}]%newline" />
    </header>
    <footer value="[Footer]&#13;&#10;" />
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter">
    <acceptOnMatch value="true" />
    <levelMin value="INFO" />
    <levelMax value="INFO" />
  </filter>
</appender>
<root>
    <!--<level value="All" />-->
    <appender-ref ref="DebugAppender" />
    <appender-ref ref="RollingLogFileAppender" />
    <appender-ref ref="SQLCEAppender" />
</root>

Я пытался активировать только файловый и / или файловый приложения, но безрезультатно. Я также разложил свой SQL-запрос в фиктивную вставку только для исключения значений ключа / нуля и так далее.

И по моему app.xaml.cs (Приложение Silverlight), у меня есть этот код только для настройки и установки правильного пути к .sdf файл.

var codeBase = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
var directory = Path.GetDirectoryName(codeBase);
var path = Path.Combine(directory, "log4Net.config");

log4net.Config.XmlConfigurator.Configure(new Uri(path));

var repo = LogManager.GetRepository();
var appender = repo.GetAppenders()
    .FirstOrDefault(x => x.Name.Equals("SQLCEAppender")) as AdoNetAppender;

appender.ConnectionString = "Data Source=" + Path.Combine(directory, "Log.sdf;Persist Security Info=False;");
appender.ActivateOptions();

ILog log = LogManager.GetLogger(typeof (App));
log.Info("Starting application");
log.Debug("Printing debug");

Я получаю прекрасный журнал отладки (у меня есть еще несколько приложений в моей конфигурации) и в моем файле. Когда я смотрю на объект appender, он говорит, что он открыт для базы данных, и если я изменю путь к .sdf Если что-то не так, приложение не говорит, что соединение в порядке.

Что мне не хватает? Я также установил System.Data.SqlServerCe.dll чтобы скопировать, и я могу увидеть DLL на устройстве.

1 ответ

У вас установлен параметр bufferSize, равный 100. Количество символов, которые вы регистрируете, не превышает размер bufferSize. Попробуйте установить его на 0 и проверьте, работает ли он.