5

system.data.sqlite プロバイダーを使用するように log4net を設定する方法の良い例を知っている人はいますか?

私は最近それをいじっていて、すべてうまくいっていると思っていました。データベースへの接続に成功し、それを「書き込み」ます。ただし、テーブル データを見ると、実際にログがコミットされることはありません。

4

2 に答える 2

12

次の参照が設定されていることを確認してください。

  • log4net (明らかに)
  • System.Data.SQLite (これは忘れてしまうかもしれません)

Visual Studio でプロジェクトを閉じ、テキスト エディターで .csproject (または VB の同等のプロジェクト) を再度開き、参照セクションを探します。私は次のようになります。

<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\externals\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\externals\sqlite.net\System.Data.SQLite.dll</HintPath>
</Reference>

SQLite のリファレンスに注意してください。この場合、次のテキストが必要です。System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139これは、ADO.net と互換性のある SQL 接続クラスをホストするアセンブリの完全な名前であり、実際には log4net が依存しているものです。

Visual Studio でプロジェクトを再度開き、.config ファイルがあることを確認して、XML テキスト エディターで開きます。すべてを説明するよりも、ここに構成ファイルを貼り付ける方が簡単です。ここではアセンブリ名を使用することに注意してください。

これを configSections XML ノードに入れます。

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

構成の直接の XML 子ノードとして、次の XML セクションを配置します。

<log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
        </layout>
    </appender>
    <appender name="sqlite" type="log4net.Appender.AdoNetAppender">
        <bufferSize value="100" />
        <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        <connectionString value="Data Source=log4net.db;Version=3;" />
        <commandText value="INSERT INTO Log (Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" />
        <parameter>
            <parameterName value="@Date" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
            <parameterName value="@Level" />
            <dbType value="String" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@Logger" />
            <dbType value="String" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger" />
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@Message" />
            <dbType value="String" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message" />
            </layout>
        </parameter>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="sqlite" />
    </root>
</log4net>

最後のステップとして、指定した sqlite db ファイルが指定した場所に事前に存在することを確認する必要があります。これを行う 1 つの方法は、データベースを作成し、それをリソースとしてアタッチして、出力フォルダーにコピーすることです。指定したものと同じ名前であることを確認してください(この場合log4net.db

于 2009-09-02T18:32:39.257 に答える
0

私は今日同じことを検索していて、http://sqlite.phxsoftware.com/forums/t/1667.aspxを見つけました

これは、System.Data.SQLite ADO プロバイダー (公式の apache ドキュメントに記載されている他のプロバイダーの代わりに) をうまく使用できた人のサンプル構成です。

それがあなたを正しい方向に導くことを願っています。

于 2009-04-16T18:58:58.530 に答える