¿Cuál es el significado de la propiedad log4j.rootLogger en el archivo log4j.properties? ¿Qué pasa si no uso esta propiedad?


86

¿Cuál es el significado de la log4j.rootLoggerpropiedad en log4j.propertiesarchivo? ¿Qué pasa si no uso esta propiedad?

Ejemplo :

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

¿Qué sucede si configuro esta propiedad en ERRORmodo.

Respuestas:


94

Samudra Gupta explica en su libro 1 :

El Loggerobjeto es el objeto principal que utiliza un desarrollador de aplicaciones para registrar cualquier mensaje. Los Loggerobjetos que actúan dentro de una instancia particular de una aplicación siguen una jerarquía de padres e hijos .

Si tiene la siguiente configuración:

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO

Así es como la jerarquía del registrador podría terminar pareciendo: 2

Árbol

Samudra Gupta continúa explicando:

En la parte superior de la jerarquía existe un registrador raíz. El registrador raíz existe fuera del alcance de cualquier jerarquía de registradores personalizados que se nos ocurra. Siempre existe como registrador raíz para todas las jerarquías de registradores posibles y no tiene espacio de nombres. Todos los demás Loggerobjetos específicos de la aplicación son objetos secundarios del registrador raíz. La relación padre-hijo de los registradores significa la dependencia de los registradores que actúan dentro de la misma aplicación. Un registrador secundario puede heredar propiedades de su registrador principal de forma recursiva en el árbol. Normalmente, un registrador secundario heredará las siguientes propiedades de su registrador principal:

  • Level: Si el registrador hijo no tiene un nivel de árbol explícito especificado, utilizará el nivel de su padre más cercano o el primer nivel adecuado que encuentre recursivamente en la jerarquía.
  • Appender: Si no hay un appender adjunto a un registrador, el registrador hijo usa el appender de su registrador padre más cercano o el primer appender que encuentra recursivamente en el árbol.
  • ResourceBundle: ResourceBundlesson archivos de propiedades de patrones de clave-valor que se utilizan para la localización de mensajes de registro. Un registrador hijo hereda cualquier ResourceBundleasociado con su registrador padre.

NOTAS

1 Samudra Gupta, Pro Apache Log4j, segunda edición (Berkeley, CA: Apress, 2005), 24-25, ISBN13: 978-1-59059-499-5

2 Dominic Mitchell, Logging in Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , consultado el 26 de mayo de 2014.


1
+1 para "Siempre existe como el registrador raíz para todas las jerarquías de registradores posibles y no tiene espacio de nombres".
Azim

2
¿Cuál es la respuesta a esta pregunta de OP - " ¿Qué pasa si no uso esta propiedad? " ??
hagrawal

4
Dios ... mira el fondo del enlace a la página de Dominic. Absolutamente ilegible.
MasterJoe

@ testerjoe2: tienes razón, aunque es una imagen bonita, hace que sea difícil de leer, como en los viejos tiempos del html, donde la gente tenía un fondo amarillo con texto blanco, ¡hace que tus ojos quieran sangrar!
JGlass

10

Contestar

¿Qué pasa si no uso esta propiedad?

Si no configura rootLogger en un nivel y un appender, recibirá una advertencia.

Por ejemplo, si omite o comenta la línea log4j.rootLogger=DEBUG, stdout, es decir, dice que su archivo log4j.properties contiene solo el registrador raíz y no registradores adicionales, aquí se comenta el registrador raíz:

#log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

Obtendrá algo como el siguiente resultado:

log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

7

La propiedad log4j.rootLogger establece el Nivel (DEBUG aquí) y Appender (A1 aquí) para root Logger. Esto no es obligatorio. El registrador de raíces no tiene adjunto un appender predeterminado y puede existir sin un appender. Por lo tanto, su archivo de propiedades log4j puede estar sin que se establezca esta propiedad.

El registrador raíz es el registrador más alto en la jerarquía de log4j similar a la clase Object en Java.

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.