Отделен лог файл за всяка война, разгърната на 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 и да добавя logback jar към war, така че това не е това, което искам.
  3. Вече прочетох „Jetty/Tutorial/Sifting Logs with Logback“. Става дума за разделяне по hotstname, а не по приложение, така че също не помага.

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


Отговори (1)


В документацията, Пресяване на регистрационни файлове с LogBack, примерът използва slf4j MDC, за да настроите "хост" като разделяне. Можете да използвате произволен избор за разделяне, който искате, със собствения си MDCHandler.

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

Една техника е да използвате заявката .getContextPath() за разделяне на какъвто и контекст да е разгърнато вашето уеб приложение.

person Joakim Erdfelt    schedule 02.01.2013
comment
Изведнъж request.getContextPath() е нула за моите заявки. Конфигурирах приложението си с контекстен файл, поставен в директорията на контекстите с <Set name="contextPath">/context</Set> ред. Изглежда, че се опитвам да получа contextPath, преди моят HttpServletRequest да бъде предаден на съответния ContextHandler. Някакви идеи? - person Danila Ponomarenko; 09.01.2013