使用SQL Server Ce 4.0和log4net

| 我正在尝试将SQL Server Compact Edition(v4.0)与log4net一起使用。这里有很好的指南。它使用Compact Edition 3.5,但是大多数步骤应该相同。 因此,我在MVC Web应用程序的\“ App_Data \”中创建了一个带有\“ Log \”表的SQL Server CE 4.0数据库,并确保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>
而且...什么都没发生-没有日志。当我换出到文本文件追加器时,会收到日志,因此与该追加器有关-但是我不知道该怎么办。有人可以帮忙吗?     
已邀请:
我相信您遇到的问题是未设置bufferSize。将bufferSize选项设置为如下所示:
<bufferSize value=\"1\" />
把它放在你的appender里面,你应该很好。     
我实际上也遇到过同样的问题,但是设法解决了。 我在您的示例中发现了两个问题:
<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个相关的“ 5”块。 我还添加了@BiggsTRC建议的
<bufferSize>
节点。 然后,一切开始工作。     
好的-最后我放弃了,决定通过编写一个自定义Appender来做到这一点,该Appender使用Entity Framework编写日志-实际上对我来说更好,因为我可以在自定义追加程序中添加有关错误的更多信息。     

要回复问题请先登录注册