регистратор java не проходит через System.out - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть регистратор, использующий java api, и в модульном тесте я устанавливаю вывод из стандарта на свой вывод и проверяю, печатаются ли сообщения (журнал, исключения и т. Д. c ...) мой код равно

    ByteArrayOutputStream mockedOutput = new ByteArrayOutputStream();
    System.setOut(new PrintStream(mockedOutput));
    System.setErr(new PrintStream(mockedOutput));

, но журнал не захватывается в выводе, если я проверяю консоль (затмение или прогон через maven), журнал там, это означает, что мой вывод не проходит. Если заменить журнал для system.out.print, то он работает, я также вижу исключения и т. Д., Только вещи, которые регистрируются с помощью java API, не регистрируются в mockedOutput.

Кто-нибудь есть идея ?, я исчерпываю подсказку.

1 Ответ

0 голосов
/ 03 февраля 2020

Включите больше вашего кода и файла logging.properties, потому что вывод зависит от того, когда создаются ваши регистраторы и, следовательно, обработчики.

Если вы полагаетесь на ConsoleHandler для записи в ваш поток, вам придется отложить создание вашего регистратора. Это связано с тем, что ConsoleHandler будет захватывать снимок System.err .

Не видя ваш код, вам необходимо убедиться, что:

  1. Вы отложили создание вашего ConsoleHandler, пока вы не переназначите System.err.
  2. Если вы зависите от регистратора root, то отложите создание утилиты root logger, которую вы переназначили System.err. Это делается путем вызова Logger.getLogger("") после переназначения System.err.
  3. Не позволяйте вашим регистраторам неожиданно получить мусор .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...