Первое, что я обнаружил, это то, что JUnit5
является причиной смешанного выходного файла журнала, когда мы выполняем тестовые сценарии многопоточным способом. Когда я использовал JUnit4
вывод по умолчанию, обычно консоль ожидает окончания теста для записи.
С другой стороны, выходной файл из log4j
, когда пользователь выполняет его с многопоточностью, всегда показывает смешивание всех потоков независимо от версии JUnit.
Им я добавляю идентификатор потока в шаблон макета log4j:
%d{yyyy-MM-dd HH:mm:ss} %-5p- **[%tid]** %m%n
И после завершения каждого потока я читаю последние строки выходного файла log4j и фильтрую по номеру идентификатора потока, чтобы получить соответствующие строки. С этим пунктом мне пришлось решить другую проблему. Как получить абсолютный путь к выходному лог-файлу динамического log4j? Я тестирую два решения:
- Отражением (не рекомендуется, но быстрее)
- Реализуйте свой собственный FileAppender, чтобы создать метод для доступа к полю
fileName
Следующие два шага следуют первому варианту:
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Appender appender = ctx.getConfiguration().getAppenders().get("file");
Переменная appender
имеет поле fileName, но оно является закрытым.