3

スレッドで実行される MySession オブジェクト (Web ではなく一般的な Session) があります。MySession のフィールドから取得したデータを含めるために、NDC クラスを使用したいと考えています。それを作成したユーザー、開始時間などです。フィールドをメッセージに「レンダリング」したいと思います。それは可能ですか、それともメッセージに対してのみサポートされていますか? 前もって感謝します

public class MySession {
    String userName;
    Date startTime;

    public void doSomething() {
        NDC.push(this);                                    //cannot do something like this?
        NDC.push(this.userName 
                  + " " + startTime.toString());          //or should I do this? 
    }

}
4

2 に答える 2

4

NDC は、すべてのログ メッセージに「コンテキスト」(自由形式の文字列) を追加するだけです (ログ形式によって出力される場合と出力されない場合があります)。ネストされた部分はNDC.pop()、前の (次のレイヤーの上) コンテキストに戻ることを意味します。

this.username + '.' + this.startTime.toString()それでも、任意の時点で、コンテキストは単一のフリーフォーム文字列です。そのため、2 番目の例のように、のようなものをプッシュする必要があるのは正しいことです。String 引数を取るAPIを見ればわかります。pushこのコンテキストは、ログ メッセージ (暗黙的に文字列) の一部としてのみ使用されるため、異なる型の任意のオブジェクトを受け入れるメリットはありません。

于 2011-05-25T10:49:41.413 に答える
3

事実上、必要なテキスト (またはオブジェクトのテキスト表現) を NDC に入れることができます。オブジェクトを NDC にレンダリングすることはサポートされていませんtoString()。ほとんどの場合、これで十分です (または、少なくとも十分なはずです)。NDC 内の内容が多すぎたり複雑だったりすると、ログが読みにくくなるため、NDC の内容を必要最小限に制限することをお勧めします。

たとえば、あなたの場合、セッションの開始時刻を各ログメッセージに入れるのはやり過ぎです(そして、あいまいになる可能性もあります)。ある種の一意のセッション ID のみを NDC にプッシュし (そのようなものがある場合)、設定の直後に、ユーザー名、起動時間などの他のセッションの詳細を専用メッセージに記録することをお勧めします。 NDC。これにより、必要なすべてのセッション データをログから取得し、特定のログ メッセージに対応するセッションを特定することができます。

于 2011-05-25T10:49:10.680 に答える