Есть ли способ перехватить сгенерированный контейнером STDOUT во встроенном Jetty Logback? - PullRequest
0 голосов
/ 19 октября 2018

Ситуация:

-> самодельное приложение-контейнер, использующее logback, настроенное с помощью ConsoleAppender.Различные регистраторы для указания уровней журналов в зависимости от пакета:

<logger name="com.mycompany.package1">
    <level value="DEBUG"/>
</logger>
<logger name="com.mycompany.package2">
    <level value="INFO"/>
</logger>

-> встроенное приложение Jetty с использованием logback, настроенное с помощью RollingFileAppender.

Мне нужно, чтобы оба вывода журнала были отправлены на один и тот жеСкользящий файл, поэтому я пытаюсь поймать контейнер STDOUT во встроенном приложении Jetty.Есть способ сделать это?это неправильный путь?

ПРИМЕЧАНИЕ. У меня есть доступ к обоим logback.xml для редактирования.

1 Ответ

0 голосов
/ 19 октября 2018

Если у вас конфигурация входа в систему, идущая на ConsoleAppender, не пытайтесь перехватить вывод и снова записать его (вы только что создали цикл).

Вместо этого просто сконфигурируйте Jetty для использования slf4j для егособственные события и НЕ использовать RolloverFileOutputStream или console-capture модуль (от пристани).

Самый простой способ - ничего не делать, просто существование slf4j-api-<ver>.jarв classpath сервера достаточно, чтобы Jetty использовала slf4j для регистрации своих собственных событий.

Короче говоря, ваш classpath сервера должен:

  • slf4j-api-<ver>.jar
  • Ваш jar (вероятно, logback-classic-<ver>.jar и logback-core-<ver>.jar)
  • A ${jetty.base}/resources/ в вашем каталоге путей с двумя файлами:
    • a jetty-logging.properties с одной строкой org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
    • ваши файлы конфигурации logback.(например: logback.xml)

Убедитесь, что вы не , используя Jetty's RollingFileOutputStream для захвата System.out и / или System.err в файл .

...