0

エラーやその他の情報を記録するために、 log4netのADO.NET Appenderを使用しています。データベースに。通常、接続文字列、SQLクエリ、パラメーターはすべて構成で指定されています。

コードでそれを行うことは可能ですか? アプリケーションにデータベース コンポーネントがあり、データベースとのやり取りはすべて単独で処理する必要があります。log4net を使用して詳細をログに記録しようとするたびに、ログ情報をデータベースに記録するために SP を呼び出すデータベース コンポーネントから log メソッドを呼び出したいと考えています。log4netを使用してこれを達成するにはどうすればよいですか?

4

2 に答える 2

1

これは、ストアド プロシージャを直接呼び出す、私が使用したアペンダー構成です。DAL コードを呼び出すことはできませんが、ストアド プロシージャをすぐに呼び出すことができます。

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<threshold value="INFO" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=<your_server>;initial catalog=<database_name>;User ID=<user_id>;Password=<pwd>" />
<commandText value="dbo.spLogInsert" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@log_date_utc" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout">
<conversionPattern value="%utcdate" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_date_local" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout">
<conversionPattern value="%date" />
</layout>
</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="@server" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}"/>
</layout>
</parameter>
</appender>
于 2012-05-23T20:02:35.237 に答える
0

私があなたを正しく理解していれば、log4net がストアド プロシージャを直接呼び出す必要はありません。その場合、独自のアペンダーを実装する必要があります。log4net のソース コードをダウンロードして、既存のアペンダーを確認することをお勧めします。

この場合、コードでアペンダーを構成する必要さえないと思います。ただし、そうすることが可能です。グーグルで検索すると、次のような多くの例が見つかります:ゼロからプログラムで log4net を構成する方法 (構成なし)

于 2012-04-12T09:51:28.997 に答える