2016-07-21 3 views
1

Я пытаюсь интегрировать Log4J2 с небольшим количеством пользовательских функций ведения журнала в моем проекте и запускать некоторые проблемы, чтобы Log4J2 вел себя так же, как и моя собственная реализация. Я хотел бы иметь возможность изменить записываемый файл журнала (make if не существует, прекратить запись в старый файл, только записать в новый файл) на основе событий, которые происходят при выполнении.Измените выходной файл Log4J2 во время выполнения

Я приведу пример, который, надеюсь, иллюстрирует то, что я ищу. Мы запускаем приложение и записываем какое-то предопределенное имя файла журнала, но мы просто записываем предварительные журналы, потому что ничего интересного пока не произошло. После того, как условия окружающей среды верны, и мы получили пользовательский ввод, в котором задействовано программное обеспечение, и мы хотели бы начать регистрацию как для отладочной информации, так и для сбора данных. Чтобы отделить предварительные данные от интересных данных, мы хотели бы изменить наш файл журнала на новый файл журнала, имя которого содержит больше информации о состоянии среды при работе системы, чтобы упростить сортировку файлов журналов мы хотим анализировать и обрабатывать пост.

Я видел сообщения о том, как выполнить подобные вещи, но они, похоже, требуют, чтобы новое имя файла было известно до того, как Log4J2 инициализирован (то есть установит системное свойство) или использует RoutingAppender, который кажется ближе, но появляется потребовать знания всех возможных значений (для определения маршрутов), которые мы, возможно, захотим поместить в наше имя файла. Нам нужно было бы определить один маршрут для каждого состояния среды (или, что еще хуже, комбинацию состояний), которые мы хотим поместить в имя файла.

Любые идеи?

ответ

1

Вы используете RoutingAppender для динамического создания новых файлов на основе ключа/значения ThreadContext.

Вот пример того, как сделать это: https://logging.apache.org/log4j/2.x/faq.html#separate_log_files

В примере, значение ROUTINGKEY на карте ThreadContext определяет новое имя файла.

+0

Это только для одного потока (с экземпляром карты ThreadContext), правда? У меня есть один статический класс с методом, который я хочу заставить всех регистраторов во всех потоках начать писать в новый файл. –

+0

Я ошибся с RoutingAppender, он более гибкий, чем я думал. Благодаря! –

Смежные вопросы