Вам нужно будет передать некоторую структуру слою доступа к данным, которая идентифицирует текущую «активность». Возможно, у вас уже есть «Activity» -класс, который имеет смысл, вы можете использовать экземпляр Logger в качестве Sunny, предложенный , или вы можете использовать третью структуру, чтобы отслеживать контекст действия.
В любом случае, поскольку ваша «активность» обрабатывается в нескольких потоках, вы не можете использовать локальное хранилище потоков для отслеживания текущей «активности», как предлагает большинство других текущих ответов. Вам нужно будет передать это явно.
Я бы предложил сделать небольшой фасад поверх log4j, который расширяет интерфейс такими методами, как
void debug(Activity activity, String message);
и передачи в нее контекста активности из уровня доступа к данным.
Вам нужно будет внести некоторые изменения в слой доступа к данным, чтобы позволить вам передавать ему текущее действие, но то, как лучше всего это сделать, сильно зависит от текущего интерфейса.
Если вы используете шаблон Workspace, вам может потребоваться добавить метод setActivity () в класс Workspace, но другой шаблон интерфейса может потребовать добавления параметра Activity для всех методов.
Если по какой-то причине вы не можете или не хотите изменять уровень доступа к данным, вы, конечно, можете сохранить контекст активности в локальном хранилище потока перед вызовом уровня доступа к данным и получить его непосредственно перед порождением подпотоков. или ставить в очередь задания на уровне доступа к данным. Это работоспособное решение, но немного опасно передавать информацию таким образом.