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