我的意思是,我希望记录器名称能够反映source.jsp文件,无论它是包含在另一个文件中还是编译成类或其他任何内容。
答案 0 :(得分:17)
首先,输入所需的包,即
<%@page import="org.apache.log4j.Logger"%>
然后,
<%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>
根据您使用的服务器,jsppagename_jsp
可能会发生变化。然后,在jsp中的任何地方使用,如:
<% logger.info("This is test."); %>
IDE可能会在logger对象的声明中显示错误消息。但是,不用担心,像tomcat这样的服务器会自动在tomcat里面自动创建每个jsp页面的相应servlet类。
答案 1 :(得分:7)
出了什么问题:
Logger logger = Logger.getLogger( "source.jsp" );
当然,您可以使用更好的非模糊前缀作为前缀。实际上,JSPS.source.jsp
之类的内容更好,因为您可以为JSPS
记录器设置日志记录规则,以后将应用于所有子记录器。
话虽如此,为什么需要直接从JSP登录?
答案 2 :(得分:5)
您可以编写一个工厂方法,该方法将当前请求作为参数,并根据JSP名称获取Logger,如下所示:
public static Logger getLogger(HttpServletRequest request) {
String requestUri = request.getRequestURI();
String jspName = requestUri.substring(requestUri.lastIndexOf('/'));
return Logger.getLogger(jspName);
}
您可能需要稍微玩一下才能使其正常工作(我还没有测试过上面的代码),但这就是它的要点。
这可以直接从JSP使用,也可以从JSP使用的bean或标记类中使用,只要它可以访问请求对象。
答案 3 :(得分:4)
以下是代码。所有配置文件的放置和配置都与它在Servlet或其他类中的使用方式相同。
<%@ page import="org.apache.log4j.Logger" %>
<html>
<head>
<title>Demonstration log4j usage in jsp</title>
</head>
<body>
<% Logger log = Logger.getLogger("com.mobilefish.demo.test");
log.debug("Show DEBUG message");
log.info("Show INFO message");
log.warn("Show WARN message");
log.error("Show ERROR message");
log.fatal("Show FATAL message"); %>
<b>The log messages are shown in the Tomcat console and in the ${catalina.home}/logs/demo.log file.</b>
</body>
</html>
答案 4 :(得分:1)
答案 5 :(得分:1)
虽然这是一个老问题,但我想提供一些选择。假设jsp filename = for_example.jsp:
<强> 1。直接使用文件名,但用下划线替换点
Logger log = Logger.getLogger("for_example_jsp");
(注意:不断的错误是直接使用&#39; for_example.jsp&#39;它将被视为类名,然后当AP服务器,例如Tomcat,找不到这样的类路径时,它将输出日志消息在catalina.out中&#34; ...(jsp)....&#34;。
<强> 2。使用请求URI
Logger log = Logger.getLogger(request.getRequestURI());
有人喜欢这个。我不知道为什么,但我之前已经在某些人的代码中看到了这一点。
第3。使用班级名称
Logger log = Logger.getLogger(this.getClass());
这通常会得到&#39; for_example_jsp&#34;除非for_example.jsp包含在其他一些servlet中,比如说&#39; test_servlet&#39;,它将包括文件的日志名称&#39; +&#39;一个有序号码&#39;,例如test_servlet_include_005。
<强> 4。以编程方式获取jsp文件名
String __jspName = this.getClass().getSimpleName(); // Get jsp program name
Logger log = Logger.getLogger(__jspName);
__jspName = __jspName.replaceAll("_","."); // get back true jsp file name
但是,对于您正在使用的AP服务器和版本,这不一定是正确的。
我个人使用方法1,因为我认为它是最可靠的。
答案 6 :(得分:0)
由于您可能希望在log4net中输出jsp-el-variables的内容,因此您可以使用此代码
<%@page import="org.apache.log4j.Logger"%>
<%-- output of the jsp-el variables "orderID" and "orderDate" in log4j --%>
<c:set var="Parameter4Log4J" value="orderID=${orderID} orderDate=${orderDate}" />
<% Logger.getLogger("jsp.order.orderconfirmation").info(
pageContext.getAttribute("Parameter4Log4J")); %>