Журналы JSF2 с котом
У меня есть проект, использующий JSF2 (2.1.2), Richfaces4 (4.0.0.Final) на tomcat6 (6.0.28). Чтобы управлять переносимостью между Tomcat и WebSphere7 для моих EAR-файлов, внутри моей библиотеки Tomcat есть следующие jar-файлы: 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() и добавил "загрузку при запуске", чтобы убедиться, что он загружается до сервлета JSF (я не уверен, что 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/ в моем приложении. Но не повезло...
3) Я попытался добавить регистраторы JSF в свойства logging.property внутри моего кота, добавив это:
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 не сработало...
Любая идея?
С Уважением,
Florian
1 ответ
Два факта:
- JSF использует
java.util.logging
API, который должен быть настроенlogging.properties
файл в корне пути к классу времени выполнения. -
logging.properties
будет использован файл текущей (!) среды выполнения (JRE).
Если вы работаете с Tomcat из IDE, такой как Eclipse, то у Tomcat 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
так что глобальный уровень консоли установлен на 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.