2012-03-22 16 views
4

私はasp.net 2.0アプリケーションでNLogを使用しています。エラーロギングと統計的な目的の両方で、多くのトラフィックを取得し、多数のデータを記録します(1日あたり平均約5000ログレコード)。 2つの異なるデータベースターゲットを使用し、それぞれがストアドプロシージャを呼び出し、両方が同じ接続文字列(SQL Server)を使用します。Nlogデータベースターゲット - keepConnectionを使用するかどうかを指定します。

ターゲット定義をいくつかのドキュメントからコピーした場合、両方のターゲットにはkeepConnectionが「true」に設定されています。これはデフォルトです。私の質問は、はこれが望ましいですか?私はしばしばデータベース上のNLogによってオープンされた多くのオープンな接続を見ています(アクティビティモニターで開いているプロセスを見て)、またNLogで接続障害が発生することがあります。私はkeepConnectionをオフにしたいと思うけど、オープンとクローズの操作が多いことも心配です。私はソースコードを見ていないし、とにかく私自身の質問に答えることができるかどうか分からないので、親アプリケーションがあるプールとの接続がどのように動作するのかよく分かりません。

考え、警告、アドバイスはありますか?私は私の質問が少し曖昧であることを知っています - それはただの帽子です。私はこの属性の裸の文書よりも何も見つけられず、賛否両論のフィードバックをしたいと思います。最初の場所?おかげさまで

+0

PS:ちょうど私のdevの環境で2.0.0.0に切り替えても、NLog 1.0.0.505を使用しています。 –

+0

MS SQL Serverを使用していますか? –

答えて

1

伝統的にkeepConnectionは指定した理由から有効になっています。大量の接続をすばやく開閉するのは恐ろしいことです。無効にすると、NLogは接続を開き、単一のログステートメントを書き込み、すべての接続に対して閉じることになります。あなたが接続を閉じるようにしたい場合は

、あなたは常にバッチでログを書き込むことによって、ロギングのパフォーマンスを向上させる

をラッパーを使用することができます非同期バッファをチェックアウト:https://github.com/nlog/nlog/wiki/AsyncWrapper-target

デフォルトのバッチサイズは、おそらく罰金である100でありますあなたのために。この場合、keepConnectionを無効にしても問題ありません。これにより、NLogは100個のログメッセージをキューに入れ、接続を開いてすべて書き込み、接続を終了します。

また、1日あたり5000個のログが実際にはロギングには非常に少なく、4ログ/分になります。他の何かのような音は間違っています。

まず第一に、トランザクションを必要とするSQL Serverを使用していることです。デフォルトでは、

useTransactions=true 
..ので、明示的にログの設定でトランザクションを有効にしてくださいNLogで無効になっている

https://github.com/nlog/nlog/wiki/Database-target

+0

async-wrapperヒントありがとう。 + – granadaCoder

関連する問題