我的意思是,我想记录器名称以反映source.jsp文件,如果它被包含在另一个文件或编译的类或任何不论。
Answer 1:
出了什么问题:
Logger logger = Logger.getLogger( "source.jsp" );
你可以用更好的无歧义的前缀预先准备,当然它。 事实上,沿线的东西JSPS.source.jsp
是更好,因为你可以设置日志记录规则JSPS
记录,以后将应用于所有子记录器。
话虽如此,你为什么需要直接从JSP登录?
Answer 2:
首先,导入所需的包,即
<%@page import="org.apache.log4j.Logger"%>
然后,
<%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>
该jsppagename_jsp
可根据您所使用的服务器更改。 然后,在任何地方使用内如JSP:
<% logger.info("This is test."); %>
IDE可能在记录器对象的声明显示错误消息。 不过,不用担心,如Tomcat服务器将自动直接创建相应的servlet类中的每个JSP页面内的tomcat本身。
Answer 3:
你可以写一个工厂方法这需要当前请求的参数,并求出基于JSP名称的记录仪,是这样的:
public static Logger getLogger(HttpServletRequest request) {
String requestUri = request.getRequestURI();
String jspName = requestUri.substring(requestUri.lastIndexOf('/'));
return Logger.getLogger(jspName);
}
你可能有它玩了一下,使其工作(我没有测试上面的代码),但是这是它的要点。
这可以直接使用从JSP,或从它是由JSP使用,只要它有访问请求对象的Bean或标签类。
Answer 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>
Answer 5:
使用适当的ConversionPattern配置log4j的,例如,当:
%d [%C] %-5p %c - %m%n
在这里,当你调用任何Logger类方法%C输出完整的类名。
Answer 6:
因为很可能你想输出JSP-EL-变量的log4net的,你可以使用此代码内容
<%@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")); %>
Answer 7:
虽然一个老问题,我想提供一些选择。 说JSP文件名= for_example.jsp:
1.使用文件名,而是直接用替换下划线点
Logger log = Logger.getLogger("for_example_jsp");
(注:不断的错误是使用“for_example.jsp”直接,这将被视为类名,然后当AP服务器,Tomcat的说,发现在catalina.out中没有这样的类路径,它会输出日志信息为” .. (JSP)...。“。
2.使用请求URI
Logger log = Logger.getLogger(request.getRequestURI());
有人喜欢这一点。 我不知道为什么,但我已经在别人的代码之前看到了这一点。
3.使用类名
Logger log = Logger.getLogger(this.getClass());
这通常会得到“for_example_jsp”除了当被包括在一些其他的servlet for_example.jsp,说‘test_servlet’,这将是‘包括文件的日志名称’+‘有序号’,如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,因为我认为这是最可靠的。