编辑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] " />
<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/