在jsp页面中使用log4j的正确方法是什么

fly*_*ire 13 java jsp log4j

我的意思是,我希望记录器名称能够反映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类.


Ale*_*yak 7

有什么不对:

Logger logger = Logger.getLogger( "source.jsp" );
Run Code Online (Sandbox Code Playgroud)

当然,你可以用更好的非模糊前缀作为前缀.实际上,有些东西JSPS.source.jsp更好,因为您可以设置记录JSPS器的记录规则,以后将应用于所有子记录器.

话虽如此,为什么需要直接从JSP登录?


ska*_*man 5

您可以编写一个工厂方法,该方法将当前请求作为参数,并根据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或标记类中使用,只要它可以访问请求对象即可.