我想记录每个<jsp:include>
标记。
JavaServer Pages标准标记库(JSTL)是否支持日志记录,如果支持,我该如何启用它?
答案 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); %>