Как мне остановить печать библиотеки Java на консоль? - PullRequest
8 голосов
/ 08 марта 2010

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

Ответы [ 7 ]

15 голосов
/ 08 марта 2010

Если используется каркас регистрации (log4j, commons-logging и т. Д.), Вы можете отредактировать / создать файл свойств, чтобы указать высокий порог регистрации. в log4j это будет выглядеть так:

log4j.logger.org.library=error

Если библиотека использует System.out, это не очень хорошая библиотека. Вы можете изменить PrintStream, позвонив System.setOut(yourDummyPrintStream)System.setErr(..)). Ваш фиктивный поток печати просто проглотит данные и никуда их не распечатает.

7 голосов
/ 08 марта 2010

Вы пытались установить OUT- и ERR-канал с помощью System.setOut() и System.setErr()?

5 голосов
/ 08 марта 2010

Я проголосовал за ответ Яна и хотел добавить:

Использование setOut означает, что вы больше не можете печатать на system.out в вашей программе.

Вы можете сделать

PrintStream oldOut=System.out

сначала сохраните его, затем вызовите setOut, чтобы изменить его, а затем просто напечатайте в oldOut.

Я зашел так далеко, что использовал это как мини-логгер - возьмите System.out, замените его собственным потоком, и мой собственный поток возьмет трассировку стека и определит вызывающий метод, чтобы он мог добавьте имя метода перед отправкой в ​​исходный System.out.

Очень медленно, но хорошо для отладки. Была настройка, чтобы вы могли вернуться к простой печати строки, скрыть все выходные данные или отфильтровать, по какому методу приходило сообщение (это было моим основным использованием, скрывая весь другой мусор, чтобы я мог видеть свой собственный вывод).

2 голосов
/ 08 марта 2010

Подумайте об использовании AspectJ, который может заменить все вхождения System.out.println () оператором по вашему выбору, возможно, оператором журнала. Это также работает с файлами JAR сторонних производителей (ищите ткачество во время загрузки).

0 голосов
/ 28 марта 2012

Если в библиотеке используются отпечатки, я бы использовал asm для замены всех sys.out.printXXx вызовом другого класса с аналогичными сигнатурами методов, которые глотают и т. Д.

0 голосов
/ 08 марта 2010

Библиотека, вероятно, использует logger, log4j или slf4j. Вполне возможно, что вы можете создать файл конфигурации для этого регистратора, а затем установить уровень журнала WARN или выше. Это остановит печать информации.

0 голосов
/ 08 марта 2010

Я не думаю, что какая-либо приличная / вменяемая библиотека использует System.out для регистрации сообщений. Так что я могу с уверенностью предположить, что он использует какую-то структуру логирования. Сконфигурируйте этот конкретный пакет на более высоком уровне ведения журнала, например, «ОШИБКА» или «ФАТАЛЬНО», чтобы вы не видели эти сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...