代码之家  ›  专栏  ›  技术社区  ›  Thilo

记录每个JSP:include

  •  2
  • Thilo  · 技术社区  · 15 年前

    我想记录 <jsp:include> 标签。

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

    4 回复  |  直到 15 年前
        1
  •  7
  •   axtavt    15 年前

    您可以实现 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")

        2
  •  2
  •   Carl Smotricz    15 年前

    不是直接的,但是你可以写自己的标签。如果你足够疯狂和勤奋,你可以写 <thilo:include> 做的标记 <jsp:include> 调用一个Java代码来进行日志记录 log4j 或者这样。

        3
  •  1
  •   Boris Pavlović    15 年前

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

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

        4
  •  1
  •   Aaron Digulla    15 年前

    实现这一点没有简单的方法。我的解决方案是一个小文件 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); %>