編集 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 タグを削除すると、コードが少し長くなるようです。ただし、ログに記録しようとすると、フォーマット例外が発生します。パラメータの 1 つを削除すると (つまり、1 つの値のみを挿入すると)、ログに記録されます。一度に 1 つの値 (message または log_level) のみを挿入しようとしましたが、正常に動作しますが、一緒にすると壊れます。
config-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 クエリをダミーの挿入にストライプしました。
私の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 が表示されます。