小编典典

带有tomcat的JSF2日志

tomcat

我有一个项目在tomcat6(6.0.28)上使用JSF2(2.1.2),Richfaces4(4.0.0.Final)。为了为我的EAR管理Tomcat和WebSphere7之间的可移植性,我的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()方法期间制作了一个小的Servlet来调用此方法,并添加了“启动时加载”以确保在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页面时,我的控制台中没有看到任何日志…我也尝试使用过滤器在执行JSF
Servlet之前调用SLF4JBridgeHandler.install(),但是从中我只能得到很多OK日志我的过滤器…

2)我试图完全按照这里的教程进行操作(它为每个JSF2记录器在tomcat日志文件夹中创建了新文件)。我尝试通过更改tomcat的conf文件夹内的logging.properties并在应用程序的src
/ resources /文件夹内添加新的logging.properties来进行尝试。但是没有运气…

3)我尝试通过添加以下命令将JSF记录器添加到tomcat内部的logging.properties中:

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)我通过遵循此文档,尝试在tomcat内使用log4j代替juli
。它似乎工作良好,但是更改生成的log4j.properties使其无法将JSF记录器置于DEBUG中…

任何的想法 ?

问候,

弗洛里安


阅读 394

收藏
2020-06-16

共1个答案

小编典典

两个事实:

  • JSF使用java.util.loggingAPI,该API将由logging.properties运行时类路径的根目录中的文件进行配置。
  • logging.properties使用当前正在运行的运行时环境(JRE)的文件。

如果您是从Eclipse之类的IDE内运行Tomcat,则logging.properties不会使用Tomcat自己的。JDK/JRE/lib将使用in中的一个,其中“
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日志记录。

2020-06-16