86 Stimmen

log4j:WARN Es konnten keine Appenders für Logger in web.xml gefunden werden

Ich habe die log4jConfigLocation bereits in web.xml eingetragen, aber ich erhalte immer noch 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>

0 Stimmen

44voto

CodeGoat Punkte 1138

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

log4j.rootLogger=debug,A1

1 Stimmen

@Kaffiene: Es scheint, dass Sie die Frage nicht vollständig gelesen haben (in diesem Fall liefert einer der Kommentare des Autors zur Frage die Informationen, auf die sich die Antwort bezieht). @CodeGoat: +1 für das Lesen aller Kommentare.

0 Stimmen

@FranciscoAlvarado Ich habe log4j.properties Datei im Klassenpfad, wird in der Konsole immer noch eine Warnung angezeigt.

30voto

Alain O'Dea Punkte 19581

Ich hatte log4j.properties an der richtigen Stelle im Klassenpfad und bekam trotzdem diese Warnung bei allem, was es direkt verwendete. 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

Selon http://logging.apache.org/log4j/1.2/manual.html :

Der Root-Logger ist anonym, kann aber mit der Methode Logger.getRootLogger() aufgerufen werden. Dem Root-Logger ist kein Standard-Appender zugeordnet.

Das bedeutet, dass Sie einen beliebigen Appender für den Root-Logger angeben müssen, damit die Protokollierung erfolgt.

Hinzu kommt, dass Konsole an den RootLogger anhängen, verschwindet diese Beschwerde.

1 Stimmen

Wo kann ich das einfügen.

0 Stimmen

@udaykiranpulipati Sie können dies in log4j.properties einfügen. Wenn Sie keine log4j.properties haben, erstellen Sie sie in src/main/resources/ wenn Sie SBT/Gradle/Maven/etc verwenden. Andernfalls fügen Sie sie irgendwo ein, wo sie an der Wurzel des Klassenpfads landet (vielleicht in src/).

19voto

prabhat Punkte 191

Dieser Fehler kann auftreten, wenn Ihr log4j.properties nicht im Klassenpfad vorhanden sind.

Das bedeutet, dass Sie die log4j.properties in den src-Ordner und die Ausgabe in den bin-Ordner, so dass zur Laufzeit log4j.properties wird aus dem bin-Ordner gelesen, und Ihr Fehler wird leicht behoben.

1 Stimmen

Ich habe das gleiche Problem in einer Desktop-Anwendung (Applet). Die Datei log4j.properties befindet sich bereits im Ordner src. Wie kann ich die Ausgabe in den bin-Ordner setzen"?

7voto

Aaron Digulla Punkte 308693

Diese Warnung wird angezeigt, wenn log4j nirgendwo eine Datei "log4j.properties" oder "log4j.xml" finden kann.

2 Stimmen

Ich bestätige, dass der Speicherort korrekt ist, denn wenn ich log4j.properties in einen anderen Namen umbenenne, gibt es eine Fehlermeldung

7voto

MikeF Punkte 71

Oder Sie machen es wie ich und definieren den Logger, bevor die Log-Konfigurationsdatei geladen wurde. Dies wäre, wie man sagt: "Das Pferd beim Schwanz aufzäumen".

Im Code:

public static Logger logger = Logger.getLogger("RbReport");

... später

PropertyConfigurator.configure(l4j);
logger = Logger.getLogger("RbReport");

Die Lösung bestand darin, den Logger zu initialisieren, nachdem die Konfiguration geladen wurde.

Für die Freaks hieß es "Descarte vor das Pferd spannen".

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X