2016-07-23 252 views
1

我想通过以下一些教程在我的web应用程序中配置log4j2。我正在使用glassfish 4.1.1服务器和servlet版本3.1。我可以用下面的配置来配置日志记录功能:使用log4j-web.jar在Web应用程序中配置Log4j2

log4j.properties

 # Root logger option 
    log4j.rootLogger=INFO, consoleAppender, fileAppender 

    # debug level logger 
    log4j.logger.kumar.suraj.college.administration.login=DEBUG 

    # Redirect log messages to console 
    log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender 
    log4j.appender.consoleAppender.Target=System.out 
    log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout 
    log4j.appender.consoleAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

    # Redirect log messages to a log file, support file rolling. 
    log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender 
    log4j.appender.fileAppender.File=E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log 
    log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout 
    log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

属性文件放置在的src/main/resources文件夹

的web.xml

 <?xml version="1.0" encoding="UTF-8"?> 
     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
     <display-name>College Administration</display-name> 
     <!--  <context-param> 
        <param-name>log4jConfiguration</param-name> 
        <param-value>/log4j.properties</param-value> 
       </context-param>is it required 
     --> 
     <!--from where is this class referenced in dependency without web --> 
     <listener> 
      <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> 
     </listener> 
     <servlet> 
      <servlet-name>loginServlet</servlet-name> 
      <servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class> 
     </servlet> 
     <servlet-mapping> 
      <servlet-name>loginServlet</servlet-name> 
      <url-pattern>/login</url-pattern> 
     </servlet-mapping> 

     </web-app> 

定义文件位置的上下文参数被注释掉了。可能log4j默认为名称为log4j.properties的文件。然而,只是想知道它是否指定文件位置的正确方法。

另外我不确定从哪个jar被引用的org.apache.logging.log4j.web.Log4jServletContextListener。我搜索了所有的jar文件,但找不到这个类。对log4j的

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

这一切

LoginServlet.java

package kumar.suraj.college.administration.login; 

    import java.io.IOException; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import org.apache.log4j.Logger; 

    import kumar.suraj.college.administration.adduser.AddUserServlet; 

    public class LoginServlet extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     // final static Logger logger = LogManager.getLogger(LoginServlet.class); 
     final static Logger logger = Logger.getLogger(LoginServlet.class); 

     public LoginServlet() { 
      super(); 
     } 

     @Override 
     protected void doGet(final HttpServletRequest request, final  HttpServletResponse response) 
     throws ServletException, IOException { 
      LoginServlet.logger.debug("debug level logging supported");    response.getWriter().append("Servedat:").append(request.getContextPath()); 
    response.getWriter().append("Hello Suraj"); 
} 

     @Override 
     protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { 
       LoginServlet.logger.debug("debug level logging supported"); 
       this.doGet(request, response); 
     } 
    } 

的pom.xml依赖工作正常,我在这两个控制台获取日志,以及文件。但是,当我试图更改配置按以下链接:

https://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0 https://logging.apache.org/log4j/2.x/maven-artifacts.html

等代替指定的依赖项前,我切换到

 <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-web</artifactId> 
      <version>2.6.2</version> 
     </dependency> 

的log4j的API和log4j的核心是增加作为与log4j-web.jar的传递依赖关系

我在LoginServlet.java中所做的其他更改是因为编译时间错误,我在切换到的log4j-web.jar其是如下:

 import org.apache.logging.log4j.LogManager; 
    import org.apache.logging.log4j.Logger; 


    public class LoginServlet extends HttpServlet { 
     private static final long serialVersionUID = 1L; 
     final static Logger logger = LogManager.getLogger(LoginServlet.class); 
     // final static Logger logger = Logger.getLogger(LoginServlet.class); 

主要变化在记录器变量的初始化和两个进口。保持所有配置保持原样。在这种情况下,我还能找到log4j-web.jar中web.xml中指定的侦听器类。仍然日志记录不适用于此配置。

有人可以帮我一下,或者告诉我我在做什么错了吗?

回答

1

好吧,经过一些更多的研究和重新阅读我之前提到的链接后,我终于成功地在我的web应用程序中配置了log4j2,现在我正在按预期获取日志。现在想提一下我做错了什么。

为链接https://logging.apache.org/log4j/2.x/manual/webapp.html

说我需要在我的部署描述符不注册Log4jServletContextListener类,如果我使用的servlet 3.0或以上版本,它只需要在servlet的2.5及以下进行注册。如果我遵守log4j2的命名约定,我也不需要提供文件位置。

另一个更改,而不是log4j2.properties现在我使用log4j2.xml作为log4j2中属性文件的格式与log4j1中使用的属性文件的格式不同。感谢下面的链接中给出的答案,帮助我弄清楚了这一点。 Log4j 2 doesn't support log4j.properties file anymore?

有关支持当前格式参考链接https://logging.apache.org/log4j/2.0/manual/configuration.html#Properties

下面是我的部署描述符和log4j的configuartion文件现在的样子:

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>College Administration</display-name> 
    <servlet> 
     <servlet-name>loginServlet</servlet-name> 
     <servlet-class>kumar.suraj.college.administration.login.LoginServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>loginServlet</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 

    </web-app> 

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE xml> 
    <Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <File name="File" fileName="E:\\DEVELOPMENT\\JAVA\\web-logs\\web-college-administration\\applicationLogs.log"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
     </File> 
    </Appenders> 
    <Loggers> 
    <Root level="debug"> 
     <AppenderRef ref="Console"/> 
     <AppenderRef ref="File"/> 
    </Root> 
    </Loggers> 
    </Configuration> 
相关问题