2

编辑 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 中直接插入 dummy-data,则它适用于这两个值。所以 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 查询条带化到一个虚拟插入中,只是为了排除键/空值等等。

在我的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文件的路径修改为错误,则 appender 并不是说​​连接正常。

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

4

1 回答 1

2

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

于 2012-05-31T13:18:02.497 回答