log4j: WARN No se pudieron encontrar añadidos para el registrador en web.xml


80

Ya puse log4jConfigLocation en web.xml, pero sigo recibiendo la siguiente advertencia:

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

¿Qué me perdí?

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

Respuestas:


43

Si ese es el archivo log4j.properties completo, parece que nunca está creando un registrador. Necesitas 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 por leer todos los comentarios.
Francisco Alvarado

@FranciscoAlvarado Tengo un log4j.propertiesarchivo en la ruta de clases, todavía advierto las pantallas en la consola.
UdayKiran Pulipati

29

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 a través de commons-logging parecía estar bien por alguna razón.

Si usted tiene:

log4j.rootLogger=WARN

Cámbielo 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 raíz es anónimo pero se puede acceder con el método Logger.getRootLogger (). No hay un appender predeterminado adjunto a la raíz.

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

Agregar ese appender de consola al rootLogger hace que esta queja desaparezca.


1
¿Dónde puedo pegar esto?
UdayKiran Pulipati

@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 donde termine en la raíz de la ruta de clase (tal vez en src /).
Alain O'Dea

19

Puede recibir este error cuando su log4j.properties no está presente en la ruta de clases.

Esto significa que debe mover el log4j.propertiesarchivo a la carpeta src y configurar la salida en la carpeta bin para que en el tiempo de ejecución log4j.propertiesse lea desde la carpeta bin y su error se resuelva 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"?
Dilshad Rana

7

Verá esta advertencia si log4j no puede encontrar un archivo "log4j.properties" o "log4j.xml" en ninguna parte.


2
Confirmo que la ubicación es correcta. porque cuando cambio el nombre de log4j.properties a otro nombre, da un error
cometta

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: "Poniendo el carro delante del caballo".

En el código:

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

... mas tarde

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

La solución fue inicializar el registrador después de que se cargó la configuración.

Para los frikis fue "Poniendo Descarte b4 d caballo".


5

Si desea realizar la configuración para las aplicaciones log4j independientes, puede usar BasicConfigurator. Esta solución no será buena para las aplicaciones web como el entorno Spring.

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

4

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


3

En mi caso la solución fue sencilla. No es necesario que declare nada en su web.xml.

Debido a que su proyecto es una aplicación web, el archivo de configuración debe estar WEB-INF/classesactivado después de la implementación. Le aconsejo que cree una carpeta de recursos Java ( src/main/resources) para hacer eso (la 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.


2

Coloque estas líneas al principio 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> 

No es necesario especificar log4jConfigLocation. Tomaría del classpath.
Krishna

¿Ha agregado un archivo xml dentro de la carpeta de clases?
Krishna

mi log4j está en src / main / resources / log4j.xml (estoy usando la integración de primavera y mi archivo de configuración está en src / min / resources / META-INF / spring / integration / spring-integration-context.xml)
MariemJab

carpeta de recursos en classpath?
Krishna

1

OK, veo muchas respuestas y algunas muy correctas. Sin embargo, ninguno solucionó mi problema. El problema en mi caso fue 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 que tomcat no podía leer el archivo ya que tomcat se ejecuta como usuario tomcat en sistemas Linux de forma predeterminada. Espero que esto ayude. por lo que la solución fue escribir 'chown tomcat: tomcat log4j.properties' en el directorio donde reside el archivo log4j.properties.


1

Agregue log4jExposeWebAppRoot -> false en su web.xml. Funciona 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>

0

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

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

La Orden importa, supongo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.