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>
cometa
fuente
Consulte también la pregunta ¿ No se pudieron encontrar añadidos para el registrador (log4j)?
PJTraill

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
CódigoCabra
fuente
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.

Alain O'Dea
fuente
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.

prabhat
fuente
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.

Aaron Digulla
fuente
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".

MikeF
fuente
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);
GARIMA KILLEDAR
fuente
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.

Marcelo Daniel
fuente
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.

jbatista
fuente
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> 
MariemJab
fuente
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.

M el desarrollador
fuente
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>
En la red
fuente
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.

Roshan Khandelwal
fuente