2

MDC は、コンテキストが実行されている特定のスレッドのコンテキスト データを格納するマップです。特定のスレッドに限定されず、アプリケーション固有の特定のデータを各ログステートメントに出力する必要がある状況で実行しています。アプリケーションが実行されている現在のノード名。だから私はMDCにノード名を追加しました

MDC.put("ソース",source_name);

アプリケーション固有であるため、MDC から削除したくありません (何らかの理由でアプリケーションがダウンした場合、間違っていなければ MDC はクリアされます)。

MDC からキーを削除しないとどうなりますか? また、アプリケーションにどのような影響がありますか?? メモリ リークなどは発生しますか??

4

1 に答える 1

2

ログに誤った MDC テキストが含まれることを除いて、影響はありません。たとえば、MDC がスレッド 1 に追加された場合、スレッド 1 を使用してログアウトしたログには MDC テキストが含まれます (ログバックの構成にも依存します)。

また、MDC データは ThreadLocal に格納されるため、パフォーマンスにわずかな影響があります。あなたが言及したように、ThreadLocal はスレッドをキーとして使用する Map のようなものです。ロギング時に get のような操作が行われます。

そして、あなたの場合、MDCに入れられるデータは非常に限られており、データは単に文字列であるため、メモリリークが発生する可能性は低いです(source_nameは文字列だと思います)。

はい。なんらかの方法でアプリケーションがダウンすると、スレッドが消え、ThreadLocal も MDC もなくなります。

お役に立てれば。

于 2017-01-11T14:15:43.013 に答える