webentwicklung-frage-antwort-db.com.de

log4j: WARN In web.xml wurden keine Appenders für Logger gefunden

Ich habe log4jConfigLocation bereits in web.xml eingefügt, bekomme aber trotzdem 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>
76
cometta

Wenn dies die gesamte log4j.properties-Datei ist, sieht es so aus, als würden Sie niemals einen Logger erstellen. Sie brauchen eine Zeile wie:

log4j.rootLogger=debug,A1
42
CodeGoat

Ich hatte log4j.properties an der richtigen Stelle im Klassenpfad und bekam trotzdem diese Warnung mit allem, was direkt verwendet wurde. Code mit log4j durch Commons-Logging schien aus irgendeinem Grund in Ordnung zu sein.

Wenn Sie haben:

log4j.rootLogger=WARN

Ä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

Der Root-Logger ist anonym, jedoch kann mit der Methode Logger.getRootLogger () darauf zugegriffen werden. An root ist kein Standard-Appender angeschlossen.

Dies bedeutet, dass Sie einen Appender oder einen Appender für den Root-Logger angeben müssen, damit die Protokollierung durchgeführt werden kann.

Durch das Hinzufügen des Appenders console zum rootLogger verschwindet diese Beschwerde.

27
Alain O'Dea

Diese Fehlermeldung wird möglicherweise angezeigt, wenn Ihr log4j.properties nicht im Klassenpfad vorhanden ist. 

Das bedeutet, dass Sie den log4j.properties in den src-Ordner verschieben und die Ausgabe auf den bin-Ordner setzen müssen, damit zur Laufzeit log4j.properties aus dem bin-Ordner gelesen wird und Ihr Fehler leicht behoben wird.

17
prabhat

Diese Warnung wird angezeigt, wenn log4j nirgends eine Datei "log4j.properties" oder "log4j.xml" findet.

7
Aaron Digulla

Oder Sie könnten 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");

Behebung des Problems: Initialisieren des Loggers nach dem Laden der Konfiguration.

Für die Freaks war es "Putting Descarte b4 d horse".

7
MikeF

Wenn Sie für die eigenständigen log4j-Anwendungen konfigurieren möchten, können Sie den BasicConfigurator verwenden. Diese Lösung ist für Webanwendungen wie die Spring-Umgebung nicht geeignet. 

Sie müssen schreiben

BasicConfigurator.configure();

oder

ServletContext sc = config.getServletContext();
String log4jLocation = config.getInitParameter("log4j-properties-location");
String webAppPath = sc.getRealPath("/");
String log4jProp = webAppPath + log4jLocation;
PropertyConfigurator.configure(log4jProp);
5
GARIMA KILLEDAR

Wenn Sie immer noch helfen, überprüfen Sie den Namen des Archivs. Es muss genau "log4j.properties" oder "log4j.xml" (Groß- und Kleinschreibung beachten) angegeben werden, und dem Hinweis "Alain O'Dea" folgen Fehler, aber nachdem Sie diese Änderungen vorgenommen haben, funktioniert alles gut ... __ wie ein Zauber: -) .. hoffe das hilft.

4
Marcelo Daniel

In meinem Fall war die Lösung einfach. Sie müssen nichts in Ihrem web.xml angeben.

Da es sich bei Ihrem Projekt um eine Webanwendung handelt, sollte sich die Konfigurationsdatei nach der Bereitstellung auf WEB-INF/classes befinden. Ich empfehle Ihnen, einen Java-Ressourcenordner (src/main/resources) anzulegen, um dies zu tun (beste Praxis). Ein anderer Ansatz besteht darin, die Konfigurationsdatei in Ihrem src/main/Java abzulegen.

Vorsicht mit dem Namen der Konfigurationsdatei. Wenn Sie XML verwenden, lautet der Dateiname log4j.xml, andernfalls log4j.properties.

3
jbatista

Setzen Sie diese Zeilen am Anfang von web.xml 

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

Weitere Informationen finden Sie unter diesem Link: http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

2
MariemJab

Fügen Sie in Ihrer web.xml log4jExposeWebAppRoot -> false hinzu. 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>
1
Innet

OK, ich sehe viele Antworten und einige sehr korrekt. Mein Problem wurde jedoch nicht behoben. In meinem Fall bestand das Problem darin, dass die UNIX-Dateisystemberechtigungen die Datei log4j.properties hatten, die ich auf dem Server als root bearbeitet habe. und nur von root lesbar. Die von mir bereitgestellte Webanwendung war jedoch, dass Tomcat die Datei nicht lesen konnte, da Tomcat standardmäßig als Benutzer Tomcat auf Linux-Systemen ausgeführt wird. Hoffe das hilft. Die Lösung gab also "chown Tomcat: tomcat log4j.properties" in das Verzeichnis ein, in dem sich die Datei log4j.properties befindet.

1
M The Developer

Ich hatte das gleiche Problem. Gleiche Konfigurationseinstellungen und gleiche Warnmeldung. Was für mich funktionierte, war: Ändern der Reihenfolge der Einträge.  

  • Ich habe die Einträge für die Protokollkonfiguration [Kontext-Parameter und Den Listener] oben in die Datei [vor den Eintrag für die ApplicationContext.xml] eingefügt und es hat funktioniert.

Die Ordnung ist wichtig, denke ich. 

0