Я пользуюсь библиотекой, которая печатает набор лишней информации к консоли, когда я ссылаюсь на него. Существует ли способ заставить вывод замолчать библиотеки?
Если используется структура ведения журнала (log4j, commons-logging и т. Д.), Вы можете отредактировать / создать файл свойств, чтобы указать высокий порог ведения журнала. в log4j это будет выглядеть так:
log4j.logger.org.library=error
Если библиотека использует System.out
, это изначально не очень хорошая библиотека. Вы можете изменить PrintStream
, вызвав System.setOut (yourDummyPrintStream)
(и System.setErr (..)
). Ваш фиктивный поток печати просто проглотит данные и никуда не распечатает их.
Вы пытались установить OUT- и ERR-канал с помощью System.setOut ()
и System.setErr ()
?
Я проголосовал за ответ Яна и хотел добавить:
Использование setOut означает, что вы не можете печатать в system.out в своей программе больше.
Вы можете сначала выполнить
PrintStream oldOut=System.out
, чтобы сохранить его, затем вызвать setOut, чтобы изменить его, а затем просто распечатайте в oldOut.
Я зашел так далеко, что использовал его в качестве мини-логгера - возьмите System.out, замените его моим собственным потоком и попросите мой собственный поток захватить трассировку стека и выяснить вызывающий метод, чтобы он мог добавьте имя метода перед перенаправлением в исходный System.out.
Ужасно медленно, но хорошо для отладки. Имел параметр, позволяющий вернуться к простой печати строки, скрыть весь вывод или отфильтровать, каким методом было получено сообщение (что было моим основным использованием, скрывая весь другой мусор, чтобы я мог видеть свой собственный вывод).
Библиотека, вероятно, использует логгер, log4j или slf4j. Возможно, вы можете создать конфигурационный файл для этого логгера, а затем установить уровень журнала на WARN или выше. Это остановит печать информации.
Я не думаю, что какая-нибудь приличная / нормальная библиотека использует System.out для регистрации сообщений. Поэтому я могу с уверенностью предположить, что он использует какую-то структуру ведения журнала. Настройте этот конкретный пакет на более высокий уровень ведения журнала, например ERROR или FATAL, чтобы вы не видели эти сообщения.
Рассмотрите возможность использования AspectJ, который может заменить все вхождения System.out.println () оператором по вашему выбору, возможно, оператором журнала. Это также работает со сторонними jar-файлами (ищите ткачество во время загрузки).