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 wirdweb.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?