2

編集 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]&#13;&#10;" />
    <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 が表示されます。

4

1 に答える 1

2

bufferSize を 100 に設定しています。ログに記録する文字数は、bufferSize を超えないようにしてください。0 に設定して、動作するかどうかをテストしてください。

于 2012-05-31T13:18:02.497 に答える