记录每个jsp:include

时间:2010-01-08 13:44:32

标签: java jsp logging jstl

我想记录每个<jsp:include>标记。

JavaServer Pages标准标记库(JSTL)是否支持日志记录,如果支持,我该如何启用它?

4 个答案:

答案 0 :(得分:8)

您可以实施Filter并将其映射配置如下:

<filter>
    <filter-name>logging</filter-name>
    <filter-class>com.example.LoggingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>logging</filter-name>
    <url-pattern>*.jsp</url-pattern>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

此过滤器会拦截所有RequestDispatcher.include()次来电,包括<jsp:include>。要获取包含资源的路径,请使用request.getAttribute("javax.servlet.include.servlet_path")

答案 1 :(得分:2)

不是直接的,但您可以编写自己的标签。如果你有足够的疯狂和勤奋,你可以编写<thilo:include>标签<jsp:include>并调用一些Java代码来通过log4j等进行记录。

答案 2 :(得分:1)

找到实现此标记的实际Java代码,并检查其中是否有任何日志记录语句。如果在日志记录配置中启用了该类。如果没有日志记录语句,则使用AOP定义方法拦截器,它将记录每次调用Java实现方法。从方法拦截器,您可以访问调用的方法参数,如果需要,也可以记录这些参数。

请记住,AOP可能会降低应用程序的执行速度。您可能希望在生产环境中禁用它。

答案 3 :(得分:1)

没有简单的方法可以实现这一目标。我的解决方案是一个小文件pre.jsp,其中包含:

<%@page import="org.apache.log4j.Logger"%>
<%
    String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");

    Logger log = Logger.getLogger(this.getClass().getName());
    log.info("BEGIN JSP "+__jspName);
%>
<!-- BEGIN <%=__jspName %> -->

在每个文件中,我都会在开头添加这一行:

<%@ include file="/pre.jsp" %>

最后这一个:

<!-- END <%=__jspName %> --><% log.info("END JSP "+__jspName); %>