Как отключить захват стандартного вывода в JBoss?

Использование JBoss EAP 6.4 (полагаю, AS 7.x).

По умолчанию служба ведения журналов JBoss записывает все выходные данные приложения в стандартный вывод (и, предположительно, в стандартный вывод) и упаковывает их в свои собственные журналы на основе log4j. При локальном запуске я хочу полностью отключить эту (раздражающую) функцию1, но все ссылки, которые я нашел в Интернете, либо не работают, либо относятся к более старым версиям JBoss. Я пытался исключить все возможные структуры ведения журнала в конфигурации jboss-deployment-structure, передав -Dorg.jboss.logging.per-deployment=false в качестве системного свойства, но JBoss все равно фиксирует стандартный вывод.

Как я могу отключить его в этой версии JBoss?


[1] Если вам нужно знать причину, это потому, что у нас есть подробная конфигурация ведения журнала через журнал, и при локальном запуске в среде IDE мы хотим иметь возможность видеть и контролировать этот вывод журнала в консоли без вмешательства службы ведения журнала JBoss.


person E-Riz    schedule 12.05.2016    source источник


Ответы (1)


В точках входа жестко запрограммирован захват stdout и stderr. Это делается для того, чтобы оба потока записывались в определенные обработчики журналов. Из-за этого нет настоящего чистого пути вокруг него. Однако есть способы сделать его хотя бы немного лучше.

Вы можете создать новый console-handler и определить регистратор stdout, чтобы обеспечить запись только простого сообщения.

Вот несколько команд CLI для настройки регистратора с именем stdout для простой печати получаемого сообщения.

/subsystem=logging/pattern-formatter=plain-formatter:add(pattern="%s")
/subsystem=logging/console-handler=plain-console:add(autoflush=true, target=System.out, named-formatter=plain-formatter)
/subsystem=logging/logger=stdout:add(use-parent-handlers=false, handlers=[plain-console])

Примечание. Это могла быть моя тестовая конфигурация logback.xml, но мне пришлось использовать шаблон %s%n для plain-formatter.

Единственный другой вариант, который я могу придумать, - это написать собственный журнал ConsoleAppender, который создает поток вывода на основе java.io.FileOutputStream.out, а не с использованием System.out.

person James R. Perkins    schedule 12.05.2016
comment
Я отредактирую вопрос с этим, но ... даже сделать его красивее недостаточно. Проблема в том, что наши вызовы журнала slf4j указывают уровень (отладка, информация, ошибка и т. д.), но ведение журнала JBoss упаковывает все и выводит на уровне INFO. Поэтому, если я хочу установить для корневого уровня журнала, например, значение WARN, я не вижу выходных данных приложения на консоли. Я действительно не понимаю, почему мой WAR logback.xml влияет на фильтрацию stdout JBoss, но это то, что я наблюдал. - person E-Riz; 12.05.2016
comment
Кстати, а куда идет эта конфигурация в ответе? - person E-Riz; 12.05.2016
comment
Что ж, logback.xml будет использоваться только в том случае, если вы включите logback в свое развертывание. Вы хотите настроить свой собственный менеджер журналов или хотите, чтобы контейнер позаботился о конфигурации журналов? - person James R. Perkins; 12.05.2016
comment
Ой извините за это. Я уточнил ответ, чтобы указать, что это команды CLI. - person James R. Perkins; 12.05.2016
comment
Да, и slf4j, и logback включены в WAR. Я хочу просто отключить или обойти любые службы ведения журнала, которые есть у JBoss. Честно говоря, это просто мешает мне, и я предпочитаю конфигурацию, управляемую приложением, через logback. - person E-Riz; 13.05.2016
comment
Исключив подсистему ведения журнала в jboss-deployment-structure.xml, включая slf4j и logback, это должно сделать это. Одна проблема — это ConsoleAppender, потому что System.out и System.err захватываются основными точками входа. Единственные варианты вокруг этого - это то, что я описал выше. - person James R. Perkins; 13.05.2016