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] " />
<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 и проверьте, работает ли он.