Samudra Gupta explica em seu livro 1 :
O Logger
objeto é o objeto principal que um desenvolvedor de aplicativo usa para registrar qualquer mensagem. Os Logger
objetos 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
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 Logger
objetos 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
: ResourceBundles
sã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 ResourceBundle
associado 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.
Para responder
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: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
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.
fonte