1

我试图在log4net上使用SQL Server Compact Edition(v4.0)。有一个伟大的指南here。它使用Compact Edition 3.5,但大多数步骤应该是相同的。使用带有log4net的SQL Server Ce 4.0

所以,我创建了内部“的App_Data”一个SQL Server CE 4.0数据库,在我的MVC Web应用程序“日志”表,并确保该System.Data.SqlServerCe“复制本地”是。我还将连接字符串更改为app_data文件夹。

我的appender看起来是这样的:

<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> 

而且......没有任何反应 - 没有日志。当我换出我的文本文件appender时,我得到日志,所以这与这个appender有关 - 但我不知道是什么。谁能帮忙?

回答

0

好的 - 我最终放弃了这一点,并决定通过编写一个自定义的Appender来实现它,它使用Entity Framework来编写日志 - 实际上对我更好,因为我可以添加更多关于错误的信息我的自定义appender。

+0

你能分享一些代码吗?在此,我对如何创建使用实体框架的自定义'Appender'非常感兴趣。 – InteXX 2015-02-22 13:43:59

+0

@InteXX对不起,这是以前的工作,我没有那个代码了。我记得它有很好的文档记录,我认为有些示例代码显示了一个自定义的appender。 – 2015-03-09 16:07:30

+0

无论如何,谢谢你。我会想象出来。 – InteXX 2015-03-09 21:09:01

1

我相信你遇到的问题是bufferSize没有设置。设置bufferSize选项是这样的:

<bufferSize value="1" /> 

把那个放在你的appender中,你应该很好去。

1

我实际上有同样的问题,但设法解决它。

我发现一对夫妇在你的例题:

<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 rela特区<parameter>区块。

我还添加了@BiggsTRC建议的<bufferSize>节点。

然后一切开始工作。