Наследовать appenders от вызова экземпляра в log4j или logback - PullRequest
0 голосов
/ 16 мая 2010

В моей программе у меня есть 2 отдельных потока регистрации событий (для простоты они называются потоками, в действительности это 2 приложения). Stream1 содержит ведение журнала клиента, а Stream2 содержит ведение журнала управления. Теперь это может показаться простым, за исключением того, что некоторые классы могут быть как в журнале клиента, так и в журнале сервера, в зависимости от ситуации. Еще более усложняет тот факт, что команда, которую хочет клиент, выполняется в 2 отдельных потоках (один выбирается случайным образом из пула потоков), поэтому любой вид отслеживания с помощью MDC или NDC невозможен.

Что действительно упростит это, так это если регистратор сможет унаследовать дополнения от вызывающего экземпляра . Таким образом, я могу настроить 2 приложения для 2 регистраторов и все. Однако я понятия не имею, как это сделать чисто или легко. Может кто-нибудь дать совет, как это сделать?

Примечание. Если что-то нужно передать, у меня есть компонент события, который передается всему цепочке, которую можно использовать при необходимости.

1 Ответ

1 голос
/ 17 мая 2010

Вы уже упоминали, что обработка клиента происходит в нескольких потоках, поэтому простой ThreadLocal подход может не сработать ... но сработает ThreadGroupLocal?

См. [ Существуют ли локальные переменные группы потоков в Java?

Такт, который я предлагаю, состоит в том, чтобы только один зарегистрированный пользователь регистрировался в структуре ведения журнала. Этот аппендиат будет чем-то, что ты пишешь. Реализация будет делегироваться приложению ThreadLocal / ThreadGroupLocal. , что appender будет зависеть от клиента или элемента управления.

Также обратите внимание, что ваш appender не должен быть настроен под асинхронными или пакетными абстракциями.

...