Вы можете попробовать использовать пользовательское приложение Log4J, которое принимает идентификатор потока в качестве параметра и фильтрует сообщения в зависимости от того, какой поток его вызывает. Создайте его на лету, прикрепите к регистратору.
Есть несколько проблем с этим подходом:
- Слишком много приложений замедлило бы регистрацию
- Серверы приложений обычно имеют пул потоков. Это означает, что один и тот же поток с течением времени будет участвовать в выполнении совершенно не связанных запросов, которые в конечном итоге окажутся в том же файле журнала.
Я предлагаю вам рассмотреть более простой подход: записать идентификатор потока в тот же файл журнала. Это быстро и просто, log4j имеет флаг% для этого. Позже вы можете выполнить grep / split файл журнала по идентификатору потока, если это необходимо.
Обновление
На самом деле, у вас может быть один пользовательский appender, который будет открывать файлы журнала по требованию, когда новый поток регистрирует запись (appender выполняется в контексте этого потока, просто вызовите Thread.currentThread (). GetName ()). Но вам придется заново реализовать все обычные задачи файла журнала (ротация) или делегировать его стандартному приложению для каждого файла.