2

log4netでSQLServerCompact Edition(v4.0)を使用しようとしています。ここに素晴らしいガイドがあります。Compact Edition 3.5を使用しますが、ほとんどの手順は同じである必要があります。

そこで、MVCWebアプリの「Log」テーブルを使用して「App_Data」内にSQLServer CE 4.0データベースを作成し、System.Data.SqlServerCeの「copylocal」がtrueであることを確認しました。また、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>

そして...何も起こりません-ログはありません。テキストファイルのアペンダーに切り替えると、ログが取得されるので、このアペンダーと関係がありますが、何がわかりません。誰か助けてもらえますか?

4

3 に答える 3

1

発生している問題は、bufferSizeが設定されていないことだと思います。bufferSizeオプションを次のように設定します。

<bufferSize value="1" />

それをあなたのアペンダーの中に入れてください、そしてあなたは行ってもいいはずです。

于 2011-05-28T20:09:18.080 に答える
1

私は実際にあなたの同じ問題を抱えていましたが、なんとかそれを解決することができました。

私はあなたの例でいくつかの問題を見つけました:

<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つの関連する<parameter>ブロックを削除しました。

<bufferSize>@BiggsTRCによって提案されたようにノードも追加しました。

その後、すべてが機能し始めました。

于 2011-10-25T10:19:59.810 に答える
0

わかりました-私は最終的にこれをあきらめ、エンティティフレームワークを使用してログを書き込むカスタムアペンダーを作成することでそれを行うことにしました-カスタムアペンダーにエラーに関する詳細情報を追加できるため、実際にはうまくいきました。

于 2011-05-27T09:35:29.737 に答える