我的意思是,我希望记录器名称能够反映source.jsp文件,无论它是包含在另一个文件中还是编译成类或其他任何文件.
小智 21
首先,导入所需的包即ie
<%@page import="org.apache.log4j.Logger"%>
Run Code Online (Sandbox Code Playgroud)
然后,
<%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>
Run Code Online (Sandbox Code Playgroud)
将jsppagename_jsp可根据您所使用的服务器更改.然后,在jsp内的任何地方使用:
<% logger.info("This is test."); %>
Run Code Online (Sandbox Code Playgroud)
IDE可能会在logger对象的声明中显示错误消息.但是,不用担心,像tomcat这样的服务器会直接在tomcat里面自动创建每个jsp页面的相应servlet类.
有什么不对:
Logger logger = Logger.getLogger( "source.jsp" );
Run Code Online (Sandbox Code Playgroud)
当然,你可以用更好的非模糊前缀作为前缀.实际上,有些东西JSPS.source.jsp更好,因为您可以设置记录JSPS器的记录规则,以后将应用于所有子记录器.
话虽如此,为什么需要直接从JSP登录?
您可以编写一个工厂方法,该方法将当前请求作为参数,并根据JSP名称获取Logger,如下所示:
public static Logger getLogger(HttpServletRequest request) {
String requestUri = request.getRequestURI();
String jspName = requestUri.substring(requestUri.lastIndexOf('/'));
return Logger.getLogger(jspName);
}
Run Code Online (Sandbox Code Playgroud)
您可能需要使用它来使其工作(我还没有测试上面的代码),但这是它的要点.
这可以直接从JSP使用,也可以从JSP使用的bean或标记类中使用,只要它可以访问请求对象即可.