Problemas com a API de log (java.util.logging)

4 respostas
Dieval_Guizelini

Primeiramente
preciso dizer que tenho que usar essa API em vez da tradicional e já consagrada log4j ou commons.

Segundo, vejam esse código de teste:
package teste;
public class Teste {
    // já testei outros parâmetros como: teste.Teste, Teste, this.getClass().getName() etc
    private static java.util.logging.Logger log = java.util.logging.Logger.getLogger("teste.Teste");

    public static void main(String[] args) {
        log.setLevel(Level.ALL);
        log.fine("iniciado o método main.");
        log.finest("iniciado o método main.");
        System.out.println(log.getLevel().toString() );
        System.out.println( Level.FINE.intValue() );
        System.out.println( Level.ALL.intValue() );
        System.out.println( Level.FINE.intValue() < log.getLevel().intValue() );
        log.log(Level.WARNING,"pqp");
        log.fine("finalizado o método main.");
   }
}

A saída é sempre a mesma:

ALL
500
-[telefone removido]
false
04/02/2008 19:10:48 teste.Teste main
WARNING: pqp

já fiz outros testes baseados em:
[url]http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html[/url]
e nada...
as configurações do logging.properties do sdk estão conforme o padrão criado na instalação. (uso padrão do ConsoleHandler).

Como faço para essa api aceitar a configuração e logar os outros níveis?
Alguém já usou essa api?

vw

4 Respostas

Dieval_Guizelini

Encontrei nesse link:
http://www.onjava.com/pub/a/onjava/2002/06/19/log.html?page=2
Mais alguns testes, e nesta parte de código, achei algo que me ajudou:

Handler[] handlers = Logger.getLogger( "" ).getHandlers(); for ( int index = 0; index < handlers.length; index++ ) { handlers[index].setLevel( Level.FINE ); }
eu inclui no laço:

System.out.println(handlers[index].getClass().getCanonicalName());

e obtive:

Logo, para a API fazer o equivalente do log4j eu tenho que identificar o Level desejado tanto no log como nos handlers do log.

fw

ViniGodoy

Eu tenho usado essa API a uns 4 anos, e acho que ele não deixa nada a desejar para a Log4j.

Na verdade, é excelente você poder configurar o nível dos handlers separadamente ao dos logs. Você pode também configurar o formatter diferente para cada handler.
Assim, você poderia fazer um log em console que mostrasse o que tem de mais importante, num formato compacto, enquanto o log de arquivo é mais detalhado.

Dieval_Guizelini

Vinicius,

por acaso você já consegiuu usar o chainsaw (http://logging.apache.org/chainsaw/index.html) com essa API do java? ou conhece outro produto que permite fazer algo semelhante?

Você sabe se ao rotacionar o arquivo de log, tem como configurar para ele compactar o antigo?

vw

ViniGodoy

Nunca usei o chainsaw, nem conheço nada parecido, então não sei não.

Rotacionar o arquivo é possível. Uma dos parâmetros de construção do FileHandler é o “count”, que indica até que número os arquivos de log devem ser rotacionados. O parâmetro limit indica qual o tamanho máximo do arquivo de log.

Sua construção típica é:

FileHandler handler = new FileHandler(fileName, limit, count);

Quanto a compactar eu não sei. Aqui geramos log em formato binário, para ser analisado numa ferramenta externa. E não há grandes ganhos em compacta-lo. Por isso acabei nem pesquisando o assunto.

Criado 4 de fevereiro de 2008
Ultima resposta 6 de fev. de 2008
Respostas 4
Participantes 2