问题描述
|
我正在尝试将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编写日志-实际上对我来说更好,因为我可以在自定义追加程序中添加有关错误的更多信息。