現在の「アクティビティ」を識別する構造をデータ アクセス層に渡す必要があります。意味のある「Activity」クラスが既にある場合、 Sunny が提案したように Logger インスタンスを使用する場合、またはアクティビティ コンテキストを追跡するために 3 番目の構造を使用する場合があります。
いずれにせよ、「アクティビティ」は複数のスレッドで処理されるため、他の現在の回答のほとんどが示唆するように、現在の「アクティビティ」を追跡するためにスレッドローカルストレージを使用することはできません。明示的に渡す必要があります。
次のようなメソッドでインターフェイスを拡張するlog4jの上に小さなファサードを作成することをお勧めします
void debug(Activity activity, String message);
アクティビティ コンテキストをデータ アクセス層から this に渡します。
現在のアクティビティをデータ アクセス レイヤーに渡せるようにするには、データ アクセス レイヤーに何らかの変更を加える必要がありますが、それを行う最善の方法は、現在のインターフェイスに大きく依存します。ワークスペース パターンを使用する場合、ワークスペース クラスに setActivity() メソッドを追加するだけでよい場合がありますが、他のインターフェイス パターンでは、すべてのメソッドにアクティビティ パラメーターを追加する必要がある場合があります。
何らかの理由でデータ アクセス レイヤーを変更できない、または変更したくない場合は、もちろん、データ アクセス レイヤーを呼び出す前にアクティビティ コンテキストをスレッド ローカル ストレージに格納し、サブスレッドを生成するかエンキューする直前にそれを取得することができます。データ アクセス層のジョブ。これは実行可能な解決策ですが、そのように情報を渡すのは少し危険ですか?