有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用log4jweb在web应用程序中配置Log4j2。罐子

我试图通过以下教程在我的Web应用程序中配置log4j2。我正在使用glassfish 4.1.1服务器和servlet版本3.1。我可以通过以下配置配置日志功能:

log4j。属性

     # 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文件夹中

网络。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的文件。财产。不过,我只是想知道指定文件位置的方法是否正确

我也不确定哪个罐子是org。阿帕奇。登录中。log4j。网状物正在引用Log4jServletContextListener。我搜索了所有jar文件,但找不到这个类

LoginServlet。爪哇

   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的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的可传递依赖项添加的。罐子

我在LoginServlet中做的其他更改。java是因为我在切换到log4j web后遇到编译时错误。罐子,如下所示:

     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变量的初始化和两个导入。rest所有配置保持原样。我还能够找到web中指定的侦听器类。log4jweb中的xml。在这种情况下是罐子。仍然无法使用此配置进行日志记录

谁能帮我一下,或者告诉我我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    好的,在对我之前提到的链接进行了更多的研究和重新阅读之后,我终于在我的web应用程序中配置了log4j2,现在我得到了预期的日志。现在我想提一下我做错了什么

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

    如果我使用servlet 3.0或更高版本,我不需要在部署描述符中注册Log4jServletContextListener类,它只需要在servlet 2.5或更低版本中注册。此外,如果遵守log4j2的命名约定,则不需要提供文件位置

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

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

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

    网络。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>