2009-08-12 11 views
71

ho già messo il log4jConfigLocation in web.xml, ma ho ancora ottenere il seguente avviso:log4j: WARN Nessun appenders potrebbe essere trovato per logger in web.xml

log4j:WARN No appenders could be found for logger ⤦ 
    ⤥ (org.springframework.web.context.ContextLoader). 
log4j:WARN Please initialize the log4j system properly. 

Cosa mi sono perso?

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

Vedi anche la questione [Nessun appenders potrebbero essere trovati per logger (log4j)?] (Http://stackoverflow.com/questions/12532339/no-appenders-could-be- found-for-loggerlog4j #) – PJTraill

risposta

41

Se questo è l'intero file log4j.properties, sembra che non si stia effettivamente creando un logger. Avete bisogno di una riga come:

log4j.rootLogger=debug,A1 
+1

@Kaffiene: sembra che tu non stia leggendo l'intera domanda (in questo caso uno dei commenti dell'autore alla domanda fornisce le informazioni a cui la risposta si riferisce) . @CodeGoat: +1 per leggere tutti i commenti. –

+0

@FranciscoAlvarado Ho il file 'log4j.properties' nel percorso della classe, visualizza ancora avvisi nella console. – pudaykiran

7

Vedrai questo avviso se log4j non riesce a trovare un file "log4j.properties" o "log4j.xml" ovunque.

+2

confermo che la posizione è corretta.dopo aver rinominato log4j.properties in un altro nome, restituisce l'errore – cometta

16

È possibile ottenere questo errore quando il log4j.properties non sono presenti nel classpath.

Ciò significa che è necessario spostare log4j.properties nella cartella src e impostare l'output nella cartella bin in modo che in fase di esecuzione log4j.properties leggerà dalla cartella bin e il problema verrà risolto facilmente.

+1

Ho lo stesso problema in un'applicazione desktop (applet). Il file log4j.properties è già nella cartella src. Come faccio a "impostare l'uscita nella cartella bin"? –

24

Avevo log4j.properties nella posizione corretta nel classpath e ricevevo comunque questo avviso con qualsiasi cosa lo usasse direttamente. Il codice che utilizza log4j attraverso la registrazione delle risorse comuni sembrava andare bene per qualche motivo.

Se si dispone di:

log4j.rootLogger=WARN 

modificarla 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 

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

Il logger principale è anonimo, ma si può accedere con la Logger.getRootLogger() metodo. Non esiste un appender predefinito collegato a root.

Ciò significa che è necessario specificare un appender, un qualsiasi appender, al logger root per ottenere il logging.

Aggiungendo che l'appender console al rootloging fa sparire questo reclamo.

+1

Dove posso incollarlo. – pudaykiran

+0

@udaykiranpulipati è possibile incollarlo in log4j.properties. Se non si dispone di log4j.properties, crearlo in src/main/resources/se si utilizza SBT/Gradle/Maven/etc. Altrimenti, mettilo da qualche parte che finirà alla radice del classpath (magari in src /). –

4

Se ancora presente, verificare il nome dell'archivio, deve essere esatto "log4j.properties" o "log4j.xml" (distinzione tra maiuscole e minuscole) e seguire il suggerimento di "Alain O'Dea". Stavo ottenendo lo stesso errore, ma dopo aver apportato queste modifiche, tutto funziona correttamente. proprio come un fascino :-). spero che questo aiuti.

7

Oppure, si potrebbe fare ciò che ho fatto e definire il logger prima che il file di configurazione del registro sia stato caricato. Questo sarebbe come si dice: "Mettendo il carro davanti al cavallo".

Nel codice:

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

... seguito

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

correzione si inizializzare il logger dopo la configurazione è stata caricata.

Per i geek era "Mettere Descarte b4 d horse".

3

Nel mio caso la soluzione è stata semplice. Non è necessario dichiarare nulla nel tuo web.xml.

Poiché il progetto è un'applicazione Web, il file di configurazione deve essere su WEB-INF/classes dopo la distribuzione. Ti consiglio di creare una cartella di risorse Java (src/main/resources) per farlo (procedura migliore). Un altro approccio consiste nel mettere il file di configurazione nel tuo src/main/java.

Fare attenzione al nome del file di configurazione. Se si utilizza XML, il nome del file è log4j.xml, altrimenti log4j.properties.

5

Se si desidera configurare le applicazioni standalone log4j, è possibile utilizzare BasicConfigurator. Questa soluzione non andrà bene per le applicazioni web come l'ambiente Spring.

È necessario svalutaz

BasicConfigurator.configure(); 

o

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

messo queste linee all'inizio del 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> 

Vedi questo link per maggiori dettagli: http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

+0

Non è necessario specificare log4jConfigLocation. Ci vorrebbe dal classpath. – Krishna

+0

L'ho provato ma non ha funzionato. – MariemJab

+0

hai aggiunto il file xml nella cartella delle classi? – Krishna

0

Ho avuto lo stesso problema. Stesse impostazioni di configurazione e stesso messaggio di avviso. Ciò che ha funzionato per me è stato: Modifica dell'ordine delle voci.

  • ho messo le voci per la configurazione del registro [il parametro contesto e l'ascoltatore] sulla parte superiore del file [prima della voce relativa alla applicationContext.xml] e ha funzionato.

L'ordine è importante, credo.

1

OK, vedo molte risposte e alcune molto corrette. Tuttavia, nessuno ha risolto il mio problema. Il problema nel mio caso era che le autorizzazioni del filesystem UNIX avevano il file log4j.properties che stavo modificando sul server come di proprietà di root. e leggibile solo da root. Tuttavia, l'applicazione Web che stavo implementando era quella in cui Tomcat non poteva leggere il file poiché tomcat viene eseguito come utente tomcat su sistemi Linux per impostazione predefinita. Spero che questo ti aiuti. quindi la soluzione stava scrivendo 'chown tomcat: tomcat log4j.properties' nella directory in cui risiede il file log4j.properties.

-3

è possibile aggiungere questa riga nel file XML

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC 
"-//SPRING//DTD BEAN 2.0//EN" 
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 

ed essere sicuri che il file XML si trova nella cartella src

0

Aggiungere log4jExposeWebAppRoot -> false nel vostro web.xml. Funziona con me :)

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