Ich habe die log4jConfigLocation bereits in web.xml abgelegt, erhalte jedoch weiterhin die folgende Warnung:
log4j:WARN No appenders could be found for logger ⤦
⤥ (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
Was habe ich verpasst?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>suara2</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>suara2</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
java
spring
spring-mvc
log4j
Cometta
quelle
quelle
Antworten:
Wenn dies die gesamte Datei log4j.properties ist, wird anscheinend nie ein Logger erstellt. Sie benötigen eine Zeile wie:
quelle
log4j.properties
Datei im Klassenpfad, warne immer noch Anzeigen in der Konsole.Ich hatte log4j.properties an der richtigen Stelle im Klassenpfad und bekam diese Warnung immer noch mit allem, was sie direkt verwendete. Code, der log4j über Commons-Logging verwendet, schien aus irgendeinem Grund in Ordnung zu sein.
Wenn Sie haben:
Ändern Sie es in:
log4j.rootLogger=WARN, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.conversionPattern=%5p [%t] (%F:%L) - %m%n
Laut http://logging.apache.org/log4j/1.2/manual.html :
Dies bedeutet, dass Sie dem Root-Logger einen Appender oder einen beliebigen Appender angeben müssen, damit die Protokollierung erfolgt.
Durch Hinzufügen dieses Konsolen- Appenders zum rootLogger verschwindet diese Beschwerde.
quelle
Möglicherweise wird dieser Fehler angezeigt, wenn Sie
log4j.properties
nicht im Klassenpfad vorhanden sind.Dies bedeutet, dass Sie
log4j.properties
den Ordner in den Ordner src verschieben und die Ausgabe auf den Ordner bin setzen müssen, damit zur Laufzeitlog4j.properties
aus dem Ordner bin gelesen und Ihr Fehler leicht behoben werden kann.quelle
Diese Warnung wird angezeigt, wenn log4j nirgendwo eine Datei "log4j.properties" oder "log4j.xml" finden kann.
quelle
Oder Sie können das tun, was ich getan habe, und den Logger definieren, bevor die Protokollkonfigurationsdatei geladen wurde. Dies wäre, wie sie sagen: "Den Wagen vor das Pferd stellen."
Im Code:
public static Logger logger = Logger.getLogger("RbReport");
... später
PropertyConfigurator.configure(l4j); logger = Logger.getLogger("RbReport");
Fix war, den Logger nach dem Laden der Konfiguration zu initialisieren.
Für die Geeks war es "Putting Descarte b4 d Horse".
quelle
Wenn Sie für die eigenständigen log4j-Anwendungen konfigurieren möchten, können Sie den BasicConfigurator verwenden. Diese Lösung eignet sich nicht für Webanwendungen wie die Spring-Umgebung.
Sie müssen schreiben-
oder
ServletContext sc = config.getServletContext(); String log4jLocation = config.getInitParameter("log4j-properties-location"); String webAppPath = sc.getRealPath("/"); String log4jProp = webAppPath + log4jLocation; PropertyConfigurator.configure(log4jProp);
quelle
Wenn Sie dennoch Hilfe benötigen, überprüfen Sie den Namen des Archivs. Es muss genau "log4j.properties" oder "log4j.xml" (Groß- und Kleinschreibung beachten) sein und dem Hinweis von "Alain O'Dea" folgen. Ich habe den gleichen Fehler erhalten, aber nachdem ich diese Änderungen vorgenommen habe, funktioniert alles einwandfrei. wie ein Zauber :-). hoffe das hilft.
quelle
In meinem Fall war die Lösung einfach. Sie müssen nichts in Ihrem deklarieren
web.xml
.Da es sich bei Ihrem Projekt um eine Webanwendung handelt, sollte die Konfigurationsdatei
WEB-INF/classes
nach der Bereitstellung aktiviert sein . Ich empfehle Ihnen, einen Java-Ressourcenordner (src/main/resources
) zu erstellen, um dies zu tun (beste Übung). Ein anderer Ansatz besteht darin, die Konfigurationsdatei in Ihre zu legensrc/main/java
.Achten Sie auf den Namen der Konfigurationsdatei. Wenn Sie XML verwenden, lautet der Dateiname
log4j.xml
andernfallslog4j.properties
.quelle
Fügen Sie diese Zeilen am Anfang von web.xml ein:
<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:/main/resources/log4j.xml</param-value> </context-param>
quelle
OK, ich sehe viele Antworten und einige sehr richtig. Allerdings hat keiner mein Problem behoben. Das Problem in meinem Fall war, dass die UNIX-Dateisystemberechtigungen die Datei log4j.properties enthielten, die ich auf dem Server als Eigentum von root bearbeitete. und nur von root lesbar. Die Webanwendung, die ich für Tomcat bereitstellte, konnte die Datei jedoch nicht lesen, da Tomcat standardmäßig als Benutzer Tomcat auf Linux-Systemen ausgeführt wird. Hoffe das hilft. Die Lösung bestand also darin, "chown tomcat: tomcat log4j.properties" in das Verzeichnis einzugeben, in dem sich die Datei "log4j.properties" befindet.
quelle
Fügen Sie log4jExposeWebAppRoot -> false in Ihre web.xml ein. Es funktioniert bei mir :)
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>path/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
quelle
Ich hatte das gleiche Problem. Gleiche Konfigurationseinstellungen und gleiche Warnmeldung. Was für mich funktioniert hat war: Ändern der Reihenfolge der Einträge.
Der Orden ist wichtig, denke ich.
quelle