Отдельный файл журнала для каждой войны, развернутой на Jetty.

У меня есть веб-приложение, упакованное как военный файл, который использует slf4j в качестве фасада ведения журнала. Он зависит от slf4j-api-*.jar, но не содержит его внутри. Я хочу развернуть эту войну на Jetty и настроить ведение журнала на стороне веб-контейнера.
Я поместил slf4j-api-*.jar, logback-classic-*.jar и logback-core-*.jar в ${jetty.home}/lib/ext и logback.xml в ${jetty.home}/resources, которые я настроил для записи журналов в ${jetty.home}/logs/jetty.log.
Это работает отлично. , но у меня все записано на jetty.log. Я хочу записать каждый журнал войны и собственный журнал причала в отдельный файл.

  1. Структура ведения журнала не имеет значения, я могу использовать что-то другое, чем logback, если это поможет.
  2. Я уже прочитал главу «Разделение журналов» в документации по журналу. Это вынуждает меня изменить мой файл web.xml и добавить файлы журналов в войну, так что это не то, что я хочу.
  3. Я уже читал "Jetty/Tutorial/Sifting Logs with Logback". Речь идет о разделении по имени хоста, а не по приложению, так что это тоже не помогает.

person Danila Ponomarenko    schedule 26.12.2012    source источник


Ответы (1)


В документации Просеивание журналов с помощью LogBack в примере используется slf4j MDC, чтобы настроить "хост" в качестве разделения. Вы можете использовать любой разделенный вариант со своим собственным MDCHandler.

Поскольку ключ заключается в использовании MDCHandler, он должен быть в состоянии извлечь любую информацию, присутствующую во входящем объекте запроса. (причина этого в том, что MDCHandler не является участником области действия и контекстов сервлета для самого веб-приложения, поскольку он находится перед ним)

Одним из способов является использование запроса .getContextPath() для разделения на любой контекст, в котором было развернуто ваше веб-приложение.

person Joakim Erdfelt    schedule 02.01.2013
comment
Внезапно request.getContextPath() имеет значение null для моих запросов. Я настроил свое приложение с файлом контекста, помещенным в каталог contexts со строкой <Set name="contextPath">/context</Set>. Похоже, я пытаюсь получить contextPath до того, как мой HttpServletRequest будет передан соответствующему ContextHandler. Есть идеи? - person Danila Ponomarenko; 09.01.2013