sql-server-ce - log4net 与 SQL Server CE 不将数据保存到表中

标签 sql-server-ce log4net log4net-configuration .net-cf-3.5 windows-embedded-compact

编辑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 标签,它在我的代码中会变得更长一些。但是,在尝试记录时出现格式异常。如果我删除其中一个参数(因此我只插入一个值),它就会记录下来。我尝试过一次只插入一个值(message 或 log_level),它工作正常,但放在一起就会损坏。

如果我只在配置 SQL 中直接插入虚拟数据,则它可以使用这两个值。所以 log4Net 似乎发生了一些非常奇怪的事情。

任何 idvise 都值得赞赏!

结束编辑2

编辑

经过一番尝试、错误和帮助后,我将缓冲区大小从 100 更改为 0。 纠正 SDF 文件似乎存在一些问题。

在虚拟机上重新启动设备后,当 sed 文件的路径错误时,我会收到日志错误。但是,当我得到正确的结果时,当我尝试登录到文件时出现错误,指出“与设备的远程连接已丢失。请验证设备连接并重新启动调试”

结束编辑

我正在尝试将一些内容记录到 WindowsCE 设备上的 SQL Server CE 数据库中。当我登录到文件时,一切都会按预期进行,但是当使用 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>

我尝试仅让文件附加程序和/或 sqldatabase 附加程序处于事件状态,但没有结果。我还将 SQL 查询 strip 化为虚拟插入,只是为了排除键/空值等。

在我的 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");

我得到了一个很好的调试日志(我的配置中有更多附加程序)和我的文件。当我查看附加程序对象时,它说它对数据库开放,如果我将 .sdf 文件的路径修改为错误,则附加程序不会说连接正常。

我错过了什么?我还设置了要复制的 System.Data.SqlServerCe.dll,我可以在设备上看到该 dll。

最佳答案

您将 bufferSize 设置为 100。您记录的字符数不要超过 bufferSize。尝试将其设置为0并测试是否有效。

关于sql-server-ce - log4net 与 SQL Server CE 不将数据保存到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834238/

相关文章:

c# - 从 Visual Studio C# 和 SQL Compact(连接、选择、插入)开始?

visual-studio-2008 - Windows 上的 SQL Server CE 安装 - 只需引用 DLL 就完成了?

asp.net-mvc-2 - log4net RollingFileAppender 和 IIS 7.5

c# - log4net 在每一行打印日期时间/调用类/函数

azure - 使用 blob 存储配置和监视 log4net

c# - Log4Net 不写入 SQL 表

c# - 发生异常时关闭数据库连接的正确方法

azure - Azure 网站上的 SQL Server CE

.net - 使用备份 appender 进行日志记录

logging - 如何将AND和Log4net过滤器组合在一起