Как я мешаю библиотеке Java печатать к консоли?

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

8
задан dave 8 March 2010 в 17:54
поделиться

6 ответов

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

log4j.logger.org.library=error

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

15
ответ дан 5 December 2019 в 05:44
поделиться

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

7
ответ дан 5 December 2019 в 05:44
поделиться

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

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

Вы можете сначала выполнить

PrintStream oldOut=System.out

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

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

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

5
ответ дан 5 December 2019 в 05:44
поделиться

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

0
ответ дан 5 December 2019 в 05:44
поделиться

Я не думаю, что какая-нибудь приличная / нормальная библиотека использует System.out для регистрации сообщений. Поэтому я могу с уверенностью предположить, что он использует какую-то структуру ведения журнала. Настройте этот конкретный пакет на более высокий уровень ведения журнала, например ERROR или FATAL, чтобы вы не видели эти сообщения.

0
ответ дан 5 December 2019 в 05:44
поделиться

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

2
ответ дан 5 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: