2016-07-23 10 views
1

Ich versuche Log4j2 in meiner Webanwendung zu konfigurieren, indem Sie einige Tutorials folgen. Ich arbeite mit Glassfish 4.1.1 Server und Servlet Version 3.1. Ich bin in der Lage, die Logging-Funktion mit der folgenden Konfiguration zu konfigurieren:Konfigurieren von Log4j2 in Web-Anwendung mit log4j-web.jar

 # 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 

die Eigenschaften Datei

in src/main/resources-Ordner abgelegt wird

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.properties

Der Kontextparameter, der den Speicherort der Datei definiert, ist auskommentiert. wahrscheinlich sucht log4j standardmäßig nach einer Datei mit dem Namen log4j.properties. Ich wollte nur wissen, ob es der richtige Weg ist, den Speicherort der Datei anzugeben.

Auch ich bin nicht sicher, von welchem ​​jar ist org.apache.logging.log4j.web.Log4jServletContextListener referenziert. Ich habe alle JAR-Dateien durchsucht, konnte diese Klasse jedoch nicht finden.

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 Abhängigkeit für log4j

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

Das alles funktioniert gut und ich bekomme Protokolle sowohl Konsole als auch Datei. Aber wenn ich versuche, um die Konfiguration zu ändern gemäß den folgenden Links:

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

Wie statt Abhängigkeit angegeben früher schalte ich auf

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

log4j-api und log4j-Kern hinzugefügt als transitive Abhängigkeiten mit log4j-web.jar

andere Änderungen, die ich in LoginServlet.java gemacht habe, ist wegen der Kompilierzeit Fehler, den ich nach dem Wechsel bekommen habe log4j-web.jar, die wie unten ist:

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

Die wichtigsten Änderungen sind in der Initialisierung der Logger variable und die beiden Importe. Rest alle Konfiguration blieb so wie sie ist. Außerdem konnte ich in diesem Fall die in web.xml in log4j-web.jar angegebene Listener-Klasse finden. Die Protokollierung mit Standbildern funktioniert nicht mit dieser Konfiguration.

Könnte jemand bitte mir dabei helfen oder mir sagen, was ich hier falsch mache?

Antwort

1

Ok, nach ein bisschen mehr Recherche und erneutem Lesen der Links, auf die ich mich früher bezog, habe ich es endlich geschafft, log4j2 in meiner Webapplikation zu konfigurieren und nun bekomme ich Logs wie erwartet. Jetzt möchte ich erwähnen, was ich falsch gemacht habe.

Wie im Link angegeben https://logging.apache.org/log4j/2.x/manual/webapp.html

Ich brauche nicht Log4jServletContextListener Klasse in meinem Deployment Descriptor registrieren, wenn ich verwende Servlet 3.0 oder höher, muss sie nur in Servlet 2.5 und unten registriert sein. Außerdem muss ich den Speicherort der Datei nicht angeben, wenn ich mich an die Namenskonvention von log4j2 halte.

Eine andere Änderung anstelle von log4j2.properties jetzt verwende ich log4j2.xml als das Format für die Eigenschaftendatei in log4j2 ist anders als die in log4j1 verwendet. Danke an die Antworten, die in dem unten stehenden Link gegeben wurden, der mir geholfen hat, dies herauszufinden. Log4j 2 doesn't support log4j.properties file anymore?

Für das aktuelle Format unterstützt siehe Link https://logging.apache.org/log4j/2.0/manual/configuration.html#Properties

Unten ist, wie mein Deployment Descriptor und log4j Configuartion Datei jetzt aussieht:

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> 
Verwandte Themen