簡體   English   中英

使用log4j-web.jar在Web應用程序中配置Log4j2

[英]Configuring Log4j2 in web application using log4j-web.jar

我正在嘗試通過遵循一些教程在Web應用程序中配置log4j2。 我正在使用glassfish 4.1.1服務器和Servlet 3.1版。 我可以使用以下配置來配置日志記錄功能:

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文件,但找不到此類。

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);
       }
  }

log4j的pom.xml依賴項

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

所有這些工作正常,我在控制台和文件中都獲得了日志。 但是,當我嘗試按照以下鏈接更改配置時:

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-core與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);

主要變化在於logger變量的初始化和兩個導入。 其余所有配置保持原樣。 在這種情況下,我也能夠在log4j-web.jar中找到web.xml中指定的偵聽器類。 仍然無法通過該配置記錄日志。

有人可以幫我嗎,或者告訴我我在做什么錯?

好的,經過更多的研究和重新閱讀了我之前提到的鏈接,我終於設法在Web應用程序中配置了log4j2,現在我可以按預期獲取日志了。 現在想提一提我做錯了什么。

如鏈接https://logging.apache.org/log4j/2.x/manual/webapp.html中所述

如果我使用的是Servlet 3.0或更高版本,則無需在部署描述符中注冊Log4jServletContextListener類,它只需要在Servlet 2.5或更低版本中注冊。 另外,如果我遵循log4j2的命名約定,則無需提供文件位置。

現在,我使用的是log4j2.xml,而不是log4j2.properties,因為log4j2中的屬性文件格式與log4j1中使用的格式不同。 感謝下面鏈接中給出的答案,這些答案幫助我弄清楚了這一點。 Log4j 2不再支持log4j.properties文件?

有關當前支持的格式,請參閱鏈接https://logging.apache.org/log4j/2.0/manual/configuration.html#Properties

下面是我的部署描述符和log4j配置文件現在的外觀:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM