1

以前の経験と調査に基づいて、log4Net を使用して職場でのロギングを実装しました。

ただし、log4net が開発会議で提示されたとき、カスタム ロガーを使用することが一般的に好まれました。その理由は、構成ファイルで挿入クエリを指定する代わりに、Telerik の ORM から生成されたコードを使用するためでした。

<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
   <bufferSize value="1"/>
   <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
   <connectionStringName value="Test"/>
   <commandText value="INSERT INTO Log (UniqueId,Date,UserId,Thread,level,Logger,Message,Exception)     VALUES (UUID(),?log_date,?userid,?thread,?log_level,?logger,?message,?exception)" />
   ...

あなたのアドバイスは何ですか?この目的のためにカスタムアペンダーを作成できますか? カスタムロガーを使用する必要がありますか?

詳細については、ここでカスタム ロガーに関する肯定的な意見と否定的な意見があります。

ありがとう

4

1 に答える 1

0

カスタムロガーを作成することができ、それはあなたがものを記録するために好きなメカニズムを使用することができます。個人的には、AdoNetAppenderが完璧に機能していることがわかりました。

ただし、エンタープライズオペレーションのサポートに取り組んだことがあるので、メッセージをログに記録するために最低インピーダンスの手法を使用することを強くお勧めします。ログは、本番システムのデバッグで独自のものになります。「dbアクセスパターンの一貫性」のためにアペンダーを書くことは避けたいと思います。

データベース、ORM、OS、またはネットワークの問題が発生している場合、最後に必要なのは、ロガーが機能しないことです。ファイル、Windowsデバッグメッセージ、およびETWロギングは、最初に推奨するものです。これはDBロギングでバックアップでき、より安全にするために、dbロギングを少なくとも別のdbに配置します。これにより、本番環境に影響を与えません。システム。できれば、ネットワーク接続が機能しないローカルサーバー上にあることが望ましいでしょう。

編集

本当に必要な場合は、AdoNetAppenderからクラスを派生させてから、CommandTextプロパティをオーバーライドしてカスタムにすることができます。ここに、私が配置できないように見える例があります。これは、connectionstringを使用して行います。

于 2013-03-09T13:21:55.917 に答える