什么是使用JSP页面中的log4j的正确方法(what is the right way to us

2019-08-21 20:44发布

我的意思是,我想记录器名称以反映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,因为我认为这是最可靠的。



文章来源: what is the right way to use log4j within jsp pages
标签: java jsp log4j