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>
java
spring
spring-mvc
log4j
cometa
fuente
fuente
Respuestas:
Si ese es el archivo log4j.properties completo, parece que nunca está creando un registrador. Necesitas una línea como:
fuente
log4j.properties
archivo en la ruta de clases, todavía advierto las pantallas en la consola.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:
Cámbielo a:
Según http://logging.apache.org/log4j/1.2/manual.html :
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.
fuente
Puede recibir este error cuando su
log4j.properties
no está presente en la ruta de clases.Esto significa que debe mover el
log4j.properties
archivo a la carpeta src y configurar la salida en la carpeta bin para que en el tiempo de ejecuciónlog4j.properties
se lea desde la carpeta bin y su error se resuelva fácilmente.fuente
Verá esta advertencia si log4j no puede encontrar un archivo "log4j.properties" o "log4j.xml" en ninguna parte.
fuente
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".
fuente
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
o
ServletContext sc = config.getServletContext(); String log4jLocation = config.getInitParameter("log4j-properties-location"); String webAppPath = sc.getRealPath("/"); String log4jProp = webAppPath + log4jLocation; PropertyConfigurator.configure(log4jProp);
fuente
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.
fuente
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/classes
activado 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 susrc/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 contrariolog4j.properties
.fuente
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>
fuente
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.
fuente
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>
fuente
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.
La Orden importa, supongo.
fuente