2009-08-12 8 views
71

ya pusieron el log4jConfigLocation en web.xml, pero aún así obtener la siguiente advertencia:log4j: WARN No appenders hemos encontrado nada con logger en web.xml

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

Qué me he perdido?

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

Véase también la pregunta [No hay appenders hemos encontrado nada con logger (log4j)?] (Http://stackoverflow.com/questions/12532339/no-appenders-could-be- found-for-loggerlog4j #) – PJTraill

Respuesta

41

Si ese es todo el archivo log4j.properties, parece que en realidad nunca está creando un registrador. Se necesita una línea como:

log4j.rootLogger=debug,A1 
+1

@Kaffiene: parece que eres tú quien no está leyendo toda la pregunta (en este caso, uno de los comentarios del autor a la pregunta proporciona la información a la que se refiere la respuesta) . @CodeGoat: +1 para leer todos los comentarios. –

+0

@FranciscoAlvarado Tengo el archivo 'log4j.properties' en la ruta de la clase, todavía advierto que aparece en la consola. – pudaykiran

7

verá esta advertencia si log4j no puede encontrar un archivo "log4j.properties" o "log4j.xml" en cualquier lugar.

+2

confirmo que la ubicación es correcta.Porque cuando cambio el nombre log4j.properties a otro nombre, da el error – cometta

16

Usted puede obtener este error cuando su log4j.properties no están presentes en la ruta de clase.

Esto significa que tiene que mover el log4j.properties en la carpeta src y ajustar la salida a la carpeta bin de manera que en tiempo de ejecución log4j.properties leerá desde la carpeta bin y su error será resuelto fácilmente.

+1

Tengo el mismo problema en una aplicación de escritorio (Applet). El archivo log4j.properties ya está en la carpeta src. ¿Cómo "configuro la salida en la carpeta bin"? –

24

Tenía log4j.properties en el lugar correcto en el classpath y todavía recibí esta advertencia con cualquier cosa que lo usara directamente. El código que usa log4j mediante el registro de commons parecía estar bien por alguna razón.

Si usted tiene:

log4j.rootLogger=WARN 

Cambiar a:

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 

Según http://logging.apache.org/log4j/1.2/manual.html:

El registrador de la raíz es anónimo, pero se puede acceder con el Logger.getRootLogger() método. No hay ningún appender predeterminado asociado a la raíz.

Lo que esto significa es que debe especificar algún appender, cualquier appender, al registrador de raíz para que el registro se realice.

Agregando que consola complemento al rootLogger hace que desaparezca esta queja.

+1

Donde puedo pegar esto. – pudaykiran

+0

@udaykiranpulipati puede pegar esto en log4j.properties. Si no tiene log4j.properties, créelo en src/main/resources/si usa SBT/Gradle/Maven/etc. De lo contrario, colóquelo en algún lugar que termine en la raíz de la ruta de clases (tal vez en src /). –

4

Si aún así ayuda, verifique el nombre del archivo, debe ser exacto "log4j.properties" o "log4j.xml" (distingue entre mayúsculas y minúsculas), y siga la sugerencia de "Alain O'Dea". Estaba obteniendo el mismo error, pero después de realizar estos cambios, todo funciona bien. como un encanto :-). espero que esto ayude.

7

O bien, podría estar haciendo lo que hice y definir el registrador antes de que se haya cargado el archivo de configuración de registro. Esto sería como dicen: "Poner el carro delante del caballo".

En el código:

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

... más adelante

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

Fix era para inicializar el registrador después de la configuración se cargó.

Para los frikis era "Poner Descarte b4 d horse".

3

En mi caso, la solución fue fácil. No necesita declarar nada en su web.xml.

Como su proyecto es una aplicación web, el archivo de configuración debe estar en WEB-INF/classes después de la implementación. Te aconsejo que crees una carpeta de recursos de Java (src/main/resources) para hacer eso (mejor práctica). Otro enfoque es poner el archivo de configuración en su src/main/java.

Tenga cuidado con el nombre del archivo de configuración. Si está utilizando XML, el nombre del archivo es log4j.xml, de lo contrario log4j.properties.

5

Si desea configurar las aplicaciones autónomas log4j, puede utilizar BasicConfigurator. Esta solución no será buena para aplicaciones web como Spring environment.

Necesitas escribir-

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

poner estas líneas en el comienzo de 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> 

Vea este enlace para más detalles: http://mariemjabloun.blogspot.com/2014/04/resolved-log4jwarn-no-appenders-could.html

+0

No es necesario que especifique log4jConfigLocation. Tomaría de la classpath. – Krishna

+0

Lo intenté pero no funcionó. – MariemJab

+0

¿ha agregado el archivo xml dentro de la carpeta de clases? – Krishna

0

Tuve el mismo problema. Mismos ajustes de configuración y el mismo mensaje de advertencia. Lo que funcionó para mí fue: Cambiar el orden de las entradas.

  • puse las entradas para la configuración de registro [el parámetro contexto y el oyente] en la parte superior del archivo [antes de la entrada para el applicationContext.xml] y funcionó.

El pedido importa, supongo.

1

OK, veo muchas respuestas y algunas muy correctas. Sin embargo, ninguno solucionó mi problema. El problema en mi caso era que los permisos del sistema de archivos UNIX tenían el archivo log4j.properties que estaba editando en el servidor como propiedad de root. y legible solo por root Sin embargo, la aplicación web que estaba implementando era para que tomcat no pudiera leer el archivo ya que tomcat se ejecuta como usuario tomcat en sistemas Linux de forma predeterminada. Espero que esto ayude. así que la solución estaba escribiendo 'chown tomcat: tomcat log4j.properties' en el directorio donde reside el archivo log4j.properties.

-3

Puede añadir esta línea en el archivo 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"> 

y asegúrese de que el archivo XML se encuentra bajo la carpeta src

0

Añadir log4jExposeWebAppRoot -> false en su web.xml. Trabaja conmigo :)

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