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.