Logging

8 respostas
M

Preciso fazer com que meu sistema gere um arquivo de log, toda vez que for executado e quando der algum erro. Mas para isso tenho que usar a API do próprio J2SE, não poderei usar nenhum framework como o log4j.
porem tenho algumas dúvidas.

1º Para que ter uma API de Log. Quais as vantagens q ela tem ? Eu não poderia gerar um arquivo comum ?

2º Como eu faço isso, eu dei uma olhada em alguns exemplo na internet, mas nenhum mostra gravando em um arquivo.

3º - Por algum motivo o arquivo pode estar aberto e o sistema pode estar executando. Por acaso ele vai gravar o log ? Ele não vai dar erro ?

Obrigado a quem puder me ajudar.

8 Respostas

G

Um API de logging é muito interessante pois te poupoa muito trabalho que você teria para gerar níveis de logging, criar diversas classes de infra-estrutura, etc. Ou seja, você terá tudo pronto para sair usando.

Não sei se a API do Java SE possui esse recurso.

Com o Log4j o log é gravado se o arquivo estiver aberto, porém as novas entradas só serão exibidas após fechar e abrir noavamente o arquivo.

J

A API do Java tem um recurso de logging, dê uma olhada, talvez sirva, se não, use o Log4J.

configurar:

Logger logger = Logger.getLogger("meuLogger"); Handler handler = new FileHandler("log.log"); logger.addHandler(handler); handler.setFormatter(new SimpleFormatter()); LogManager.getLogManager().addLogger(logger);

usar:

Logger logger = LogManager.getLogManager().getLogger("meuLogger"); logger.info("A aplicação iniciou."); logger.warning("Erro ao abrir arquivo de configurações."); logger.severe("Erro fatal Xyz.");

Veja as outras configurações pra saber quais te interessam e se essa API já serve pra você.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/package-frame.html

M

Olá jairelton, beleza?

Queria avisar que a aplicação não é para web.

Me explica uma coisa, o que seria esse código ? Seria uma configuração ? E onde eu coloco isso ?

E mais uma coisa, como eu faço para gerar o log ? Por acaso eu crio uma classe separada ? Eu nem sei por onde começar.

I

Quando tu usas o Log4J por exemplo, tu tens um arquivo de configuração que pode ser log4j.properties ou log4j.xml Este(s) arquivo(s) deve(m) estar dentro do diretório raíz da aplicação. Nele tu configura nome de arquivo de log, localização, tamanho, pacotes, formato… Depois dentro da aplicação tu deves registrar as classes no Logger e sair “espalhando” na tua classe as mensagens que queres registar (error, info, warn…) O melhor mesmo é ir ao site do Log4J, baixar a última versão e procurar o install guide. Não é difícil. T+

J

Sim, é uma configuração, você coloca onde quiser, quando você chamar o Logger pra fazer o log ele já deve estar configurado, então, coloque em um bloco estático por exemplo, crie uma classe Helper pra log, do jeito que você achar que deve…

O log está sendo gerado pelo segundo bloco de codigo que mandei.

Logger logger = LogManager.getLogManager().getLogger("meuLogger"); logger.info("Essa mensagem vai pro log.");

Dê uma olhada no Log4J, talvez ele seja melhor pra você, principalmente se o log for uma parte muito extensa da sua aplicação, se quiser algo simples, pode ficar com esse aí mesmo, que pelo menos não gera nenhuma dependência de API’s externas e é mais fácil de configurar.

http://logging.apache.org/log4j/docs/

G

Se precisar, segue o link de um tutorial sobre o Log4j: http://www.portaljava.com/home/modules.php?name=Content&pa=showpage&pid=132

M

Bom eu peguei um exemplo da revista javamagazine edição 39, e iz do jeito mais fácil. Configurando as coisas na classe.

Eu terei várias classes sendo uma delas a principal com o static void main, e outras que as utilizarei para a regra de negócio. Quero saber como faço para gravar o log de todas as classes em um mesmo arquivo. Tem como fazer isso.

Na classe static void main, eu coloquei o seguinte código

static final String LOGGER_FILE = "C:/LogFile.log";

       Logger logger = Logger.getLogger("br.com.mto.extracao.StartExtracao");
       ConsoleHandler   ch = new ConsoleHandler();
       ch   ch.setLevel(Level.ALL);
       logger.addHandler(ch);
       logger.setLevel(Level.ALL);
       logger.setUseParentHandlers(false);
        
        FileHandler fh = null;
        SimpleFormatter sf = new SimpleFormatter();
        
        fh = new FileHandler(LOGGER_FILE, 50000,1);
        fh.setFormatter(sf);
        logger.addHandler(fh);
        
        logger.info("Carrendo classe Extratora");

Agora como eu faço para a outra classe gravar no mesmo arquivo dessa classe StartExtratora.

G

Maurício, não basta você informar o mesmo nome do arquivo de log utilizad por todas as classes ?

Criado 13 de dezembro de 2006
Ultima resposta 14 de dez. de 2006
Respostas 8
Participantes 4