Qual é o significado da propriedade log4j.rootLogger no arquivo log4j.properties? O que acontece se eu não usar esta propriedade?

86

Qual é o significado da log4j.rootLoggerpropriedade no log4j.propertiesarquivo? O que acontece se eu não usar essa propriedade?

Exemplo :

# 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

O que acontecerá se eu definir essa propriedade como ERRORmodo.

Jitendra
fonte

Respostas:

94

Samudra Gupta explica em seu livro 1 :

O Loggerobjeto é o objeto principal que um desenvolvedor de aplicativo usa para registrar qualquer mensagem. Os Loggerobjetos que atuam em uma determinada instância de um aplicativo seguem uma hierarquia pai-filho .

Se você tiver a seguinte configuração:

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

É assim que a hierarquia do logger pode ficar parecida: 2

Árvore

Samudra Gupta continua a explicar:

No topo da hierarquia existe um logger raiz. O logger raiz existe fora do escopo de qualquer hierarquia de logger personalizada que possamos criar. Ele sempre existe como o logger raiz para todas as hierarquias de logger possíveis e não tem espaço para nome. Todos os outros Loggerobjetos específicos do aplicativo são objetos filho do logger raiz. O relacionamento pai-filho dos registradores significa a dependência dos registradores que atuam no mesmo aplicativo. Um criador de logs filho pode herdar propriedades de seu criador de logs pai recursivamente na árvore. Normalmente, um registrador filho herda as seguintes propriedades de seu (s) registrador (es) pai (s):

  • Level: Se o criador de logs filho não tiver um nível de árvore explícito especificado, ele usará o nível de seu pai mais próximo ou o primeiro nível adequado que encontrar recursivamente na hierarquia.
  • Appender: Se não houver nenhum anexador anexado a um criador de logs, o criador de logs filho usa o anexador de seu criador de logs pai mais próximo ou o primeiro anexador que encontrar recursivamente na árvore.
  • ResourceBundle: ResourceBundlessão arquivos de propriedades de padrão de valor-chave usados ​​para a localização de mensagens de registro. Um criador de logs filho herda qualquer um ResourceBundleassociado a seu criador de logs pai.

NOTAS

1 Samudra Gupta, Pro Apache Log4j, Second Edition (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/ , Recuperado em 26 de maio de 2014.

Paul Vargas
fonte
1
+1 para "Ele sempre existe como o logger raiz para todas as hierarquias de logger possíveis e não tem nenhum namespace."
Azim
2
Qual é a resposta a esta pergunta do OP - " O que acontece se eu não usar esta propriedade? " ??
hagrawal
4
Puxa ... olha o background no link para a página de Dominic. Absolutamente ilegível.
MasterJoe
@ testerjoe2 - você está certo, embora seja uma imagem bonita, ela a torna difícil de ler - como nos velhos tempos do html, onde as pessoas tinham um fundo amarelo com texto branco - faz seus olhos sangrarem!
JGlass
10

Para responder

O que acontece se eu não usar essa propriedade?

Se você não definir o rootLogger para um nível e um appender, você receberá um aviso.

Por exemplo, se você omitir ou comentar a linha log4j.rootLogger=DEBUG, stdout, isto é, dizer que seu arquivo log4j.properties contém apenas o rootlogger e nenhum logger adicional, aqui o logger root está sendo comentado:

#log4j.rootLogger=DEBUG, stdout

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

Você obterá algo como a seguinte saída:

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.

fonte
7

A propriedade log4j.rootLogger define o Nível (DEBUG aqui) e o Appender (A1 aqui) para o Logger raiz. Isso não é obrigatório. O logger root não tem um anexador padrão anexado e pode existir sem um anexador. Portanto, seu arquivo de propriedades log4j pode ficar sem essa propriedade ser configurada.

O logger root é o logger mais alto na hierarquia log4j semelhante à classe Object em Java.

abhishek jotshi
fonte