2011-08-12 10 views
5

すべてのログメッセージを任意のWCFエンドポイントに送信するエンタープライズライブラリロギングのカスタムトレースリスナーを作成しようとしています。この背後にあるアイデアは、リアルタイムですべてのログメッセージを出力する、単純なコンソールアプリケーションなどを相手側に設定できるということです。エンタープライズライブラリロギング:任意のWCFエンドポイントにメッセージを送信するカスタムトレースリスナ

私の質問は二つの部分である:既にこれを行うためのメカニズムが

  1. ありますか?私はすでにMSMQリスナーを見ていました。私は、ある時点で別のプロトコル/バインディングを使用する必要があるかもしれないので、MSMQリスナーを見ました。
  2. 私はそれを以下のように実装しています - それは十分に効率的か、それとも良い方法がありますか?私の懸念は、メッセージがロガーから来るたびに(頻繁になるかもしれない)、私は新しいチャンネルを開いて、それを閉じ込めることです。これがパフォーマンスの問題を引き起こしますか?

私のサンプルでは、​​RemoteClientは、ClientBase<T>に由来します。

[ConfigurationElementType(typeof(CustomTraceListenerData))] 
public class RemoteTraceListener : CustomTraceListener 
{ 
    public override void Write(string message) 
    { 
     RemoteClient client = new RemoteClient(); 
     client.Open(); 
     client.Write(message); 
     client.Close(); 
    } 

    public override void WriteLine(string message) 
    { 
     RemoteClient client = new RemoteClient(); 
     client.Open(); 
     client.WriteLine(message); 
     client.Close(); 
    } 

    public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) 
    { 
     if (data is LogEntry && this.Formatter != null) 
     { 
      WriteLine(this.Formatter.Format(data as LogEntry)); 
     } 
     else 
     { 
      WriteLine(data.ToString()); 
     } 
    } 
} 

答えて

0

「CLog」と呼ばれるオープンソースのプロジェクトが見つかりました。これは私が探しているものと全く同じです:http://clog.codeplex.com/

ソースコードを簡単に一目で彼がログメッセージを受信します開いているすべてのチャンネルを追跡するために、シングルトンオブジェクトを使っていることを示しており、各チャンネルのプロキシをインスタンス化するClientBase<T>とは対照的に、彼はChannelFactory<TChannel>で起こっています。対処する必要があるいくつかのスレッドの含意がありますが、私はまだこれが飛ぶ方法だと思います。

WCFエンドポイントにログを記録する独自のカスタムトレースリスナの実装の開始点としてこれを使用することはあまり難しいことではありません。

0

この書き込みはどのくらいですか?私はWCFストリーミングを、より頻繁にロギングするより良い方法として提案します。

これは失敗する可能性がありますが、クライアントインスタンスを可能な限り長く保つことはおそらく良い考えです。あなたはそれをプールすることができます。

+0

私はあなたが「プールする」という意味では明確ではありません。私が使用できるIISにキャッシュ機構がありますか、それを何らかのシングルトンとして実装することを意味していますか?また、ストリーミングではどういう意味ですか?セッション中のTCPバインディングのような意味ですか?それはチャンネルを開いたままにしておくことを意味します。パフォーマンス、システムの安定性などにどのような影響があるのか​​を知りたいのですが、今はnetMSMQバインディングを使用していますのでセッションを続けるとオプションがないようです。 –

+0

私は、 'ClientBase'は既にThilakが 'プールする'ことを意味するものと考えています。これは実質的にChannelFactoryをキャッシュしていますので、 'new Client'を呼び出すと、既存のフォールトでないクライアント(シーンキャッシュの裏側) –

-1

あなたはコンソールアプリケーションにログインすると、2日前に何かが表示されないため、ログインする必要がある魔女のSQLデータベースを使用する必要があると思います。SQLであなたは見積もりを作成し、あなたが必要です。 別の解決方法は、log4netプロジェクトを使用することです。

+0

を再利用します。フラットファイルのトレースリスナーを既に使用しており、おそらくSQLトレースリスナー同じように。私はこれを他のトレースリスナーに加えて、ログデータをリアルタイムで見ることができるようにしています。 –

関連する問題