Хотя я согласен с ответом Канна о том, что наилучшим подходом является фильтрация по факту, ответом на ваш вопрос при использовании Log4j 2 будет использование RoutingAppender или SiftingAppender при использовании Logback. Они оба работают одинаково в том смысле, что будут создавать новые приложения для каждого уникального элемента, что может вызвать проблемы с дескрипторами файлов. RoutingAppender Log4j2 предоставляет PurgePolicy для обработки этого, в то время как Logback предоставляет атрибут timeToLive. Logback использует класс Discriminator, чтобы выбрать способ определения того, как сопоставить событие журнала с Appender, а Log4j 2 использует либо шаблон, который должен содержать Lookup (механизм подстановки переменных Log4j 2), либо сценарий для выполнения сопоставления.
Если вы используете java .util.logging, вам придется написать собственный механизм.