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

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:

[code]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.");

}
}[/code]

A saída é sempre a mesma:

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

já fiz outros testes baseados em:
http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html
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

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

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.

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

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.