Подтвердить что ты не робот

Журналы JSF2 с tomcat

У меня есть проект с использованием JSF2 (2.1.2), Richfaces4 (4.0.0.Final) на tomcat6 (6.0.28). Чтобы управлять переносимостью между Tomcat и WebSphere7 для моих EAR, у меня есть следующие банки внутри моего tomcat lib: el-api-2.2.jar, jsf-api-2.1.2.jar, jsf-impl-2.1.2.jar, validation-api-1.0.0.GA.jar.

Моя проблема в том, что мне никогда не удавалось изменять уровни журналов JSF или Richfaces и, кроме как из инициализационных, я не вижу внутри своей консоли. Даже когда я получаю исключения в ответе на сервер!

Я пробовал несколько способов:

1) В моих приложениях я использую slf4j и log4j. Таким образом, естественным способом будет использование SLF4JBridgeHandler.install(). Я сделал небольшой сервлет, чтобы вызвать этот метод во время его метода init() и добавил "load-on-startup", чтобы быть уверенным, что он загружен до JSF Servlet (я не уверен, что tomcat вообще заботится об этом загрузке на запуск потому что я все еще получаю журналы от JSF init до), например:

INFO: JSF1027 : [null] Les objets ELResolvers de JSF n’ont pas été enregistrés avec le conteneur JSP.
09-09-2011 16:50:58:591 [Thread-2] 937  DEBUG com.jsf.test.SLF4JBridgeHandlerInstallerServlet - SLF4JBridgeHandler.install() OK!

Я также добавил некоторую конфигурацию в свой файл log4j.xml:

<logger name="javax.faces"><level value="debug"/></logger>  
<logger name="com.sun.faces"><level value="debug"/></logger>
<logger name="javax.enterprise.resource.webcontainer.jsf"><level value="debug"/></logger>

Но я не вижу никаких журналов в консоли при отображении страницы JSF... Я также попытался использовать фильтр для вызова SLF4JBridgeHandler.install() перед выполнением сервлета JSF, но я получаю только много журналов OK из моего фильтра...

2) Я попытался точно следовать учебнику здесь (он создает новые файлы в папке журнала tomcat для каждого регистратора JSF2). Я попытался изменить logging.properties в папке conf tomcat и добавлением новых параметров logging.properties внутри моей src/resources/folder в моем приложении. Но не повезло...

3) Я попытался добавить регистраторы JSF в logging.properties внутри моего tomcat, добавив следующее:

javax.enterprise.resource.webcontainer.jsf.managedbean.level=FINEST
javax.enterprise.resource.webcontainer.jsf.managedbean.handlers = java.util.logging.ConsoleHandler
javax.enterprise.resource.webcontainer.jsf.config.level=FINEST
javax.enterprise.resource.webcontainer.jsf.config.handlers = java.util.logging.ConsoleHandler
javax.enterprise.resource.webcontainer.jsf.facelets.level=FINEST
javax.enterprise.resource.webcontainer.jsf.facelets.handlers = java.util.logging.ConsoleHandler
javax.enterprise.resource.webcontainer.jsf.resource.level=FINEST
javax.enterprise.resource.webcontainer.jsf.resource.handlers = java.util.logging.ConsoleHandler
javax.enterprise.resource.webcontainer.jsf.lifecycle.level=FINEST
javax.enterprise.resource.webcontainer.jsf.lifecycle.handlers = java.util.logging.ConsoleHandler

Не повезло...

4) Я попытался использовать log4j внутри tomcat вместо juli, следуя этой документации. Кажется, что это хорошо работает, но изменение полученных log4j.properties для размещения JSF-регистраторов в DEBUG не сработало...

Любая идея?

Привет,

Флориан

4b9b3361

Ответ 1

Два факта:

  • JSF использует java.util.logging API, который должен быть настроен с помощью файла logging.properties в корневом пути пути выполнения.
  • Будет использоваться файл logging.properties текущей (!) рабочей среды выполнения (JRE).

Если вы запускаете Tomcat из среды IDE, например Eclipse, то Tomcat own logging.properties не будет использоваться. Единица в JDK/JRE/lib будет использоваться там, где "JDK" является папкой установки JDK, такой как jdk1.6.0_23. Если вы хотите явно указать местоположение файла logging.properties, вам нужно будет установить аргумент VM:

-Djava.util.logging.config.file=/path/to/tomcat/logging.properties 

Независимо от используемого файла ведения журнала, чтобы включить ведение журнала Mojarra, вам нужно открыть файл шаблона logging.properties, прокрутите страницу вниз и отредактируйте следующую строку внизу

java.util.logging.ConsoleHandler.level = INFO

в

java.util.logging.ConsoleHandler.level = ALL

чтобы уровень консоли global был установлен на ALL вместо INFO. В противном случае нижние уровни, чем INFO, вообще не будут регистрироваться.

Наконец, добавьте следующие две строки в самую нижнюю часть файла

javax.faces.level = ALL
com.sun.faces.level = ALL
javax.enterprise.resource.webcontainer.jsf.level = ALL

Первый включает все протоколы JSF API, второй включает все записи JSF impl (Mojarra), а третий включает все записи JSF Java EE.