2009-08-28 6 views
1

ここでは、3つのWebサイト、オープンAPI、10のサービス、およびその他のインフラストラクチャの他の部分があります。彼らはすべてキューに統計メッセージを送信することができます。メッセージロギング、メッセージの発信元を確認しますか?

しかし、過去にいくつかの問題があったため、メッセージがどこから来ているのかが分かります。統計は不可能なときに記録されていました。

ウェブサイトはかなり簡単ですが、URLをキューメッセージに挿入し、そのURLにメッセージタイプが許可されているかどうかを判断するための正規表現のリストがあります。

しかし、私たちはURLを持っていない他のアプリケーションでどうすればいいですか?メッセージはインフラストラクチャの非常に深いところに記録されることがあり、すべてのアプリケーションで使用できるものがあります。誰か良い提案はありますか?

答えて

1

何とかキューに接続する必要があります。それは彼らのアイデンティティを指定するための完全なポイントになります。ロギングオブジェクト(またはキューへのコネクタ)のラッパーを作成します。この追加情報を保存して、の前にキューに挿入されたメッセージの前に追加することができます。

[編集]あなたのコメントの返信:私の解決策は、同様の場合:何とかロガーを渡す。私の場合、いくつかの静的メソッドがありますが、実際に誰がそれらを使用しているかを知る必要があります(ログメッセージからは明らかです)。

それともにThreadLocalでトークンを置くことができます。

String token = "A"; 
try { 
    pushToken(token); 
    ...call method of B... 
} finally { 
    pullToken(token); 
} 

private static ThreadLocal context; 

public static void pushToken (String token) { 
    if (context.get() == null) 
     context.set(token); 
} 

public static void popToken (String token) { 
    if (token.equals (context.get())) 
     context.set(null); 
} 

スタックの下の道を生き残るトークン。

+0

これは私の元々の計画でしたが、このようなケースがありました。 メソッドAはBを呼び出してCの呼び出しを呼び出し、Dの呼び出しはEを呼び出してFを呼び出してキューに送ります。 Fはすべてのプロセスで使用されています。だから私はスタックトレースを取得する必要がありますね。 –

0

あなたは正しいトラックにURLを使用しています。 URLは「ユニークリソースロケータ」の略です。

私の要点はありますか?

各ロギングファシリティに一意の識別子を付けます。

[アリス]いくつか:あなたはこのようなあなたのログを構築することができ

プロセスA --->アリス

プロセスB --->ボブ

等...物事が起こった。 [Bob]もう少しのことが起こった。

0

log4jの種類のログAPIを使用している場合は、MDC-mapped diagnostic contextを参照してください。これは特にこの種の問題のために設計されています。 logFacesをチェックしてください。easily fish outの特定のコンテキストデータをリアルタイムで、またはクエリを実行することで表示します。さもなければ、Aaronによって言及されたThreadLocalも合理的であるように思われます。長い間、多くのユーザーによってlog4jで使用されているMDCの証明された概念を使用する代わりに、あなた自身でコーディングを行う必要があります。

開示:私はこの製品の著者です。

関連する問題