Любой способ включить/выключить println в java (подробный режим)

Есть ли способ в Java сделать так, чтобы println отображался только по запросу, а не по умолчанию? В основном что-то похожее на использование "-v" во многих программах, чтобы дать вам подробный режим с информацией о том, что происходит.

Например, предположим, что у меня есть оператор if в цикле и простой println, который сообщает мне, является ли оператор if истинным для каждой итерации цикла. Есть ли другой способ включить / выключить его видимость, кроме как комментировать его, когда он мне не нужен, и раскомментировать, когда он мне нужен? Затем сохранить его, перекомпилировать и т.д.

Было бы намного проще увидеть, что происходит в моей программе, но только тогда, когда мне нужно столько информации. Как я уже сказал, я в основном ищу способ реализовать «подробный» режим, который показывает операторы печати без необходимости комментировать/раскомментировать сохранение, перекомпиляцию и т. д. Есть ли в Java что-то подобное?


person Brian C    schedule 20.08.2013    source источник


Ответы (2)


Лучше всего использовать подходящий регистратор (например, log4j).

Если это невозможно, вы можете «использовать» stdout и stderr, используя что-то вроде...

PrintStream nullPrintStream = new PrintStream(new OutputStream() {
    @Override
    public void write(int b) throws IOException {
    }
});
System.setErr(nullPrintStream);
System.setOut(nullPrintStream);

Которые предотвращают начало печати ВСЕХ выводов. Вы можете использовать прокси-процесс (используя текущий стандартный вывод, завернутый в прокси-сервер PrintStream) для фильтрации содержимого, если это более уместно...

person MadProgrammer    schedule 20.08.2013

Нет sysout нельзя отключить с помощью флага. Функциональность, которую вы ищете, предоставляется loggers, например lo4j. Используя регистратор, вы можете использовать ConsoleAppender и всегда устанавливать уровень журнала.

person Juned Ahsan    schedule 20.08.2013