Я использую приложение для добавления файлов в Log4j2 и использую ThreadContext.put (Key, Value) для динамического предоставления имени файла журнала. Все идет хорошо, журналы и папка журналов генерируются, как задумано. Ниже мой код Log4j2
<Routing name="File">
<Routes pattern="$${ctx:ROUTING_KEY}">
<Route>
<RollingFile name="app.log" bufferedIO="true" immediateFlush="true" append="true"
fileName="logs/${ctx:ROUTING_KEY}/app.log"
filePattern="logs/${ctx:ROUTING_KEY}/archive/app-%d{MM-dd-yyyy}-%i.log">
<PatternLayout>
<pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
</PatternLayout>
</RollingFile>
</Route>
</Routes>
</Routing>
И я использую приведенный ниже код для динамического предоставления имени файла журнала
ThreadContext.put(key, value);
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.reconfigure();
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что все журналы записываются в динамически создаваемую папку и файл, кроме журналов, созданных из классов процессора Camel, создается папка $ {ctx: ROUTING_KEY} и журналы процессора верблюда вводится туда.
Журналы для справки:
Camel Log
2019-05-03T12: 31: 58,342 [Нить верблюда (верблюд-1) # 1 - таймер: // Таймер] ОШИБКА com.data.app.core.camel.processor.ExceptionHandler 30 - ИСКЛЮЧЕНИЕ ПРОИЗВЕДЕНО !!
Другой журнал
2019-05-03T09: 45: 45,558 [main] ОШИБКА com.data.app.game.App 42 - Не удалось обнаружить требуемые команды.
Итак, в итоге создаются две папки для регистрации
1) GoodName <--- Содержит все журналы
2) $ {ctx: ROUTING_KEY} <--- Содержит только логи верблюжьего процессора </p>
Бонус: когда я помещаю строку ThreadContext.get (ключ) в верблюжий процессор, он возвращает ноль.