Log4j Dúvida quanto a getLogger()

6 respostas
Akila

Caros colegas que sabem log4j.

Eu estou com uma dúvida vital. Qual a diferênça entre eu utilizar a chamada Logger.getLogger(“String”) eLogger.getLogger(“minhaClasse.class”) :?:

Eu não sei a diferença, se é que tem diferença. A única coisa que sei que os´dois, para min até agora funciona da mesma forma. Alguem sabe me responder :?:

6 Respostas

caiofilipini

O Logger.getLogger(Class) chama o Logger.getLogger(String). Ou seja, dá na mesma! :wink:

Mais ou menos assim:

public static Logger getLogger(Class clazz) {
    return getLogger(clazz.getName());
}

public static Logger getLogger(String className) {
    // obtém o Logger para a classe
}

[]'s

Luca

Olá

O que você coloca aí é o nome do logger e que é referenciado no arquivo log4j.properties.

Há uma facilidade no log4j (que eu não uso) que os loggers tem uma hierarquia e herdam configurações dos ascendentes. Assim tem gente que dá nome aos loggers usando a mesma hierarquia das classes. Eu prefiro não fazer isto e controlar exatamente o que vai em cada logger. E ainda coloco sempre no log4j.properties a seguinte linha:

# Por default (additivity=true), os loggers herdam todos os appenders dos seus parentes
# Usamos false para que os loggers nao gravem a mesma coisa quando um eh parente do outro
log4j.additivity.minhaClasse.class=false

[]s
Luca

ricardolecheta

eu tb só uso assim. acho que o default tinha que ser false :slight_smile:

mas uma diferença do getLogger(sring) é que isto está no código… vc precisa compilar se alterar o log4j…

se vc sempre utilizar getLogger(class)… vc pode simplemente configurar o log4j para logar tudo de um pacote ou classe, sem alterar seu código.

Akila

Caros amigos que sabem de log4j. obrigado por esclarecer minha dúvida.

Mas então como seria essa hierarquia que o lo4j usa? para ela funcionar eu preciso passar a classe, ou não tem nada haver. a CLasse é apenas uma facilidade que passar o nome da classe? Mas acho que isso não faria sentido. deve haver outra explicação ou não?

No mais obrigado, eu já desconfiava que ao passar a classe ele passava na verdade o nome da classe, mas por outro lado não achei que isso serviria apenas para isso. Creio que não, ai mais agora que vcs falaram que tem uma hierarquia, que eu não sei como funciona… alguem pede me dar um exemplo?

caiofilipini

Sim, é a penas para tirar de você o trabalho de chamar o método Class.getName():

static final Logger LOGGER = Logger.getLogger(getClass().getName());

[]'s

ricardolecheta

olá, existem vários tutoriais no site do log4j,

um deles é esse, talvez ajude:

http://www.vipan.com/htdocs/log4jhelp.html
Criado 14 de janeiro de 2005
Ultima resposta 14 de jan. de 2005
Respostas 6
Participantes 4