LOGGING DE EVENTOS COM LOG4J



Documentos relacionados
Hoje em dia é muito comum utilizar uma API de logging de mensagens como o Log4j para indicar os comportamentos de uma aplicação.

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

ANDROID APPLICATION PROJECT

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Omega Tecnologia Manual Omega Hosting

GUIA INTEGRA SERVICES E STATUS MONITOR

MANUAL DO ANIMAIL Terti Software

Orientação a Objetos

Procedimentos para Reinstalação do Sisloc

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

Persistência de Classes em Tabelas de Banco de Dados

NOVIDADES DO JAVA PARA PROGRAMADORES C

Tutorial Módulo Frequência

NetBeans. Conhecendo um pouco da IDE

Configurar o Furbot no Eclipse

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

MANUAL DO INSTAR-MAIL 1.0. Pagina de login e senha do Instar-Mail

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Projeto SIGA-EPT. Manual do usuário Módulo Requisição de Almoxarifado SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

MANUAL BACKUP XDENTAL 2012

Frente Loja Avanço (PAF-ECF) versão Rotina de Atualização Frente Avanço Windows

Manual Administrador - Mídia System

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

O Primeiro Programa em Visual Studio.net

Utilização do Webmail da UFS

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

CONFIGURAÇÃO Cobian Backup Programa gratuito e de qualidade para realizar seus backups automáticos

Manual SAGe Versão 1.2 (a partir da versão )

Configurando o IIS no Server 2003

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

15 4 Operação Avançada do Sistema: Inclusão de Nota Fiscal e seus relacionamentos

Menus Personalizados

Tutoriais de apoio para a migração do Atualização: 30/04/2014

Procedimentos para Instalação do Sisloc

MANUAL DO GERENCIADOR ESCOLAR WEB

Processo de Envio de

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Cálculo utilizando variáveis do tipo DATA

Criando uma agenda simples com NetBeans 6.5

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Scriptlets e Formulários

1.2) Na tela seguinte, o primeiro item a ser selecionado é o Unidade Acumuladora1.

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Tutorial para envio de comunicados e SMS

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Acessando um Banco de Dados

Análise de Dados do Financeiro

Como Gerar documento em PDF com várias Imagens

Configuração do cliente de Thunderbird para usuários DAC

Guia Site Empresarial

GUIA DE ORIENTAÇÕES ROTEIRO DE CONFIGURAÇÃO DO SOFTWARE CRM PROFESSIONAL ANEXO III ROTEIRO DE CONFIGURAÇÃO - CRM PROFESSIONAL

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Curso Básico de Visual FoxPro 8.0

W o r d p r e s s 1- TELA DE LOGIN

Construção do Boxplot utilizando o Excel 2007

Manual de configuração do sistema

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

ÍNDICE MANUAL SITE ADMINISTRÁVEL TV. 1. Introdução 2. Acessando o site administrável/webtv SITE ADMINISTRÁVEL 3. CONFIGURAÇÕES

A minha primeira página

Tutorial. Windows Live Mail

Utilizando a ferramenta de criação de aulas

INSTRUMENTO NORMATIVO 004 IN004

Portal Sindical. Manual Operacional Empresas/Escritórios

DEFINIÇÃO DE MÉTODOS

Manual do sistema SMARsa Web

Java com Banco de Dados Posgree

MANUAL TISS Versão

WF Processos. Manual de Instruções

Configurando um Grupo Doméstico e Compartilhando arquivos no Windows 7

Manual do Google agenda. criação e compartilhamento de agendas

Manual do Painel Administrativo

Módulo e-rede VirtueMart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Tutorial para envio de comunicados

1. Um servidor rodando Windows 7 (um computador onde o SIPAR ficará instalado e com os dados neste computador);

César Cruz Proprietário [18/04]

TUTORIAL DO ALUNO. Olá, bem vindo à plataforma de cursos a distância da Uniapae!!!

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Cartilha da Nota Fiscal Eletrônica do Hábil Empresarial Profissional 7.0. Obrigado por usar nosso software! Koinonia Software Ltda.

Manual do Sistema "Fala Comigo - Sistema de Atendimento On-Line" Editorial Brazil Informatica

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

Entendendo como funciona o NAT

Manual de usuário. do sistema multicálculo CotakWeb

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Módulo NF-e. Manual de Utilização

Manipulação de Banco de Dados com Java 1. Objetivos

Manual Operacional SIGA

TUTORIAL UNP VIRTUAL

Data Transformation Services (DTS) por Anderson Ferreira Souza

Manual do Instar Mail v2.0

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Transcrição:

LOGGING DE EVENTOS COM LOG4J por Luiz Gustavo Stábile de Souza O que é logging? Fazer o logging de uma aplicação é uma das possíveis maneiras de debugá-la, registrando em algum meio (arquivo, enviando e-mails, gravando em bancos de dados, etc..) eventos ocorridos na aplicação, sejam eles apenas informações, ou indicações de erros no processamento. O framework de logging Log4J O Log4j é uma ferramenta open-source de logging, desenvolvida sob o projeto Apache Jakarta. É um conjunto de APIs que permite aos desenvolvedores escreverem declarações de log em seus códigos e configurá-los externamente, através de arquivos de propriedades. Para usarmos o Log4J, precisamos entender três aspectos deste framework: logger, appender, e layout. Entenda a relação dos três como a seguinte: Um logger envia os logs para um appender, que os armazena em um determinado layout (estilo). Logger Pense em um logger como um componente silencioso em sua aplicação, responsável por receber requisições de log e efetuá-las. Cada classe de uma aplicação pode ter um logger individual, mas o framework Log4J oferece um logger padrão. Caso você não crie um logger específico, pode usar o logger padrão oferecido pelo framework, chamando o método estático getrootlogger() da classe Logger. Appender Loggers precisam saber para onde enviar as informações de log. É aqui que os appenders entram em cena. O framework Log4J suporta o envio de informações de log para arquivos (FileAppender), para o console (ConsoleAppender), para bancos de dados (JDBCAppender), para eventos de log de sistemas NT (NTEventLogAppender), para servidores SMTP (SMTPAppender), para servidores remotos (SocketAppender), e outros. Um appender define as propriedades do destino de log para o Log4J. Desta maneira, se nós associarmos um appender do tipo JDBCAppender a um logger, estamos dizendo ao Log4J que os logs passados a este logger devem ser armazenados em uma determinada base de dados. Todas essas informações, referentes a como acessar o meio de armazenamento são propriedades do appender, e são usadas pelo Log4J para saber onde armazenar as informações. Página 1

Layout Loggers e appenders estão relacionados a criação e redirecionamento de nossas solicitações de log. E quanto ao formato em que serão armazenadas essas informações de log? Isso é o papel do layout, que define o estilo e o conteúdo da informação de log. Um layout define, por exemplo quando incluir informações de data e hora nos logs, linha onde o log se originou, etc. Relação de herança entre loggers Existe no Log4J uma relação de pai e filho entre os loggers que criamos. Essa relação é definida através de um padrão de nome, com a utilização do operador ponto.. Como citado anteriormente, pelo menos um logger existe para uma aplicação, o logger padrão oferecido pelo framework, e em último caso todos os loggers que criamos são filhos deste logger padrão. Para ilustrar essa relação de pai e filho entre os loggers, imagine que temos um logger cujo nome é br.com.meulogger.mylog, definido para uma classe de mesmo nome e mesmo pacote. Este logger será automaticamente "filho" de um logger que tenha o nome br.com.meulogger, caso ele exista, pelo simples fato de o nome do último fazer parte do nome do primeiro. Níveis de logging no Log4J Todo logger que usamos possui um, de cinco possíveis níveis definidos pelo Log4J: DEBUG, INFO, WARN, ERROR e FATAL. Se esse nível não for configurado explicitamente para um logger, será herdado de um logger "pai", que em último caso pode ser o logger padrão, definido pelo framework, e que possui um nível DEBUG. Portanto, todos os loggers em uma aplicação terão, no mínimo, o nível DEBUG. Mas para que servem estes níveis, e como eles podem afetar o mecanismo de logging? Assim como os loggers, todas as requisições de logging feitas a eles também possuem um nível. As requisições de logging somente serão atendidas se o seu nível for maior ou no mínimo igual ao nível do logger. Por exemplo, suponha que tenho um logger com o nível definido para WARN. Se uma solicitação de logging, de nível INFO chegar a ele, ela não será atendida, e portanto não será registrada no appender relacionado ao logger. Se enviarmos, para este mesmo logger, uma solicitação de logging de nível ERROR, ou WARN, ela será atendida e registrada, pois possui um nível maior ou pelo menos igual ao nível do logger. Essa característica é muito importante, pois podemos modificar externamente (através de arquivos de configuração) o nível dos loggers de nossa aplicação, sem ter que alterar o código. Isso permite habilitar um nível DEBUG durante o desenvolvimento, mas deixar somente o nível ERROR habilitado em produção. Uma aplicação de exemplo Para este exemplo vou utilizar o Eclipse IDE, mas se você preferir, pode executá-lo em outro IDE de sua preferência. Crie um pojeto Java simples, conforme mostra a figura 1: Página 2

figura 1: criação de um projeto Java simples Crie para o seu projeto um pacote com o nome de sua preferência, e nele crie uma classe chamada ExemploLog4J: figura 2: criação da classe ExemploLog4J.java Página 3

Em seguida, digite o seguinte código para a classe ExemploLog4J (se for necessário, faça as adaptações pra o nome do seu pacote, se ele for diferente): package blogspot.luizgustavoss.log4j; import javax.swing.joptionpane; public class ExemploLog4J { public static void main(string[] a){ ExemploLog4J exemplo = new ExemploLog4J(); exemplo.run(); public void run(){ int quantidade = solicitarquantidade(); int[] valores = new int[quantidade]; lervaloresinteiros(valores); double resultado = calcularmedia(valores); exibirvalorreal(resultado); public void exibirvalorreal(double valor){ JOptionPane.showMessageDialog(null, "o valor é: " + valor); public double calcularmedia(int[] v1){ double soma = 0; int total = 0; double resultado = 0; try{ for(int i : v1){ total++; soma += i; resultado = (soma/total); catch(exception e){ System.out.println("Erro!"); return resultado; public int solicitarquantidade(){ int valor = 0; try{ valor = Integer.parseInt( JOptionPane.showInputDialog("Quantos valores?:")); Página 4

catch(exception e){ System.out.println("Erro!"); return valor; public void lervaloresinteiros(int[] valores){ try{ for(int i = 0; i< valores.length ; i++){ valores[i] = Integer.parseInt( JOptionPane.showInputDialog("valor:")); catch(exception e){ System.out.println("Erro!"); Repare que para os possíveis casos de exceção estamos apenas enviando a mensagem "Erro!" para o console, como forma de registrar o erro. Logo modificaremos este comportamento. Agora vamos configurar o framework Log4J para nossa aplicação. Configurando o Log4J O primeiro passo para a configuração do Log4J é adicionar o seu arquivo.jar em nosso projeto. Para isso clique com o botão direito do mouse sobre o projeto e escolha a opção Properties. Em seguida escolha a aba Libraries, conforme mostra a figura 3: Página 5

figura 3: tela para adição de bibliotecas ao projeto Nesta tela, clique no botão Add External jars, e informe o arquivo.jar do Log4J, que pode ser encontrado no site oficial do projeto (http://logging.apache.org/log4j/), na seção de downloads. Depois de adicionado o arquivo.jar, a tela deverá estar como apresentado na figura 4: Página 6

figura 4: tela para adição de bibliotecas ao projeto depois de adicionar o jar do Log4J Como foi dito anteriormente, a configuração do Log4J pode ser feita externamente, através de arquivos de configuração, e pode ser feita também programaticamente, através de código. Para este estudo, vamos focar na configuração do Log4J através de arquivos de configuração, por ser uma abordagem mais flexível do que a configuração programática. O arquivo de configuração do Log4J é um arquivo de texto simples, do tipo properties, cujo conteúdo é um conjunto de chaves-valores associados. O nome do arquivo é, por padrão, log4j.properties. Crie um arquivo com este nome na raiz do projeto. Para isso, no Eclipse, clique sobre o nome do projeto e escolha no menu a opção New>Other>General>File: Página 7

figura 5: criação do arquivo log4j.properties Logo após a criação do arquivo, a estrutura do projeto deve estar parecida com a apresentada na figura 6: Página 8

figura 6: projeto já com o arquivo log4j.properties A seguir está o conteúdo para o arquivo log4j.properties. Os comentários explicam a função de cada linha: # Configura dois appenders (stdout para o console, fileout para um arquivo) # para o logger padrão, e configura um nível (INFO). Como todos os # loggers que criamos herdam do logger padrãoo, quaisquer loggers que criarmos # terão esta configuração log4j.rootcategory=info, stdout, fileout # O primeiro appender escreve para o console log4j.appender.stdout=org.apache.log4j.consoleappender # O padrão para apresentação do conteúdo (layout) log4j.appender.stdout.layout=org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern=%5p [%t] (%F:%L) - %m%n # O segundo appender escreve para um arquivo log4j.appender.fileout=org.apache.log4j.rollingfileappender log4j.appender.fileout.file=exemplo.log # Controla o tamanho máximo do arquivo de log log4j.appender.fileout.maxfilesize=500kb # Arquiva arquivos de log (somente um arquivo de backup) log4j.appender.fileout.maxbackupindex=1 # O padrãoo para apresentação do conteúdo (layout) log4j.appender.fileout.layout=org.apache.log4j.patternlayout log4j.appender.fileout.layout.conversionpattern=(%f:%l) %p %t %c - %m%n Página 9

Agora que temos o framework devidamente configurado, vamos alterar nossa classe para que sejam efetuados os logs. Adicione a seguinte declaração à classe ExemploLog4J: private org.apache.log4j.logger logger = Logger.getLogger(ExemploLog4J.class.getName()); O que esta declaração faz é criar um logger, com o mesmo nome da nossa classe. Agora, outras solicitações de logging são adicionadas ao código, inclusive substituindo o que foi colocado nos blocos catch. Eis o código final: package blogspot.luizgustavoss.log4j; import javax.swing.joptionpane; import org.apache.log4j.logger; public class ExemploLog4J { private org.apache.log4j.logger logger = Logger.getLogger(ExemploLog4J.class.getName()); public static void main(string[] a){ ExemploLog4J exemplo = new ExemploLog4J(); exemplo.run(); public void run(){ logger.info("iniciando o método run..."); int quantidade = solicitarquantidade(); int[] valores = new int[quantidade]; lervaloresinteiros(valores); double resultado = calcularmedia(valores); exibirvalorreal(resultado); logger.info("método o run finalizado!"); public void exibirvalorreal(double valor){ JOptionPane.showMessageDialog(null, "o valor é: " + valor); logger.info("operaçãoo exibirvalorreal realizada!"); public double calcularmedia(int[] v1){ double soma = 0; int total = 0; double resultado = 0; try{ for(int i : v1){ total++; Página 10

soma += i; resultado = (soma/total); logger.info("operação calcularmedia realizada!"); catch(exception e){ logger.error("erro na operação calcularmedia!"); return resultado; public int solicitarquantidade(){ int valor = 0; try{ valor = Integer.parseInt( JOptionPane.showInputDialog("Quantos valores?:")); logger.info("operação solicitarquantidade realizada!"); catch(exception e){ logger.error("erro na operação solicitarquantidade!"); return valor; public void lervaloresinteiros(int[] valores){ try{ for(int i = 0; i< valores.length ; i++){ valores[i] = Integer.parseInt( JOptionPane.showInputDialog("valor:")); logger.info("operação lervaloresinteiros realizada!"); catch(exception e){ logger.error("erro na operação lervaloresinteiros!"); Repare nas chamadas a info e error no logger criado. Estas são solicitações de logging nos níveis INFO e ERROR respectivamente, ou seja, para cada nível de logging há um método correspondente que pode ser chamado em um logger. Agora vamos executar o projeto e ver qual o resultado para as configurações feitas até o momento. Clique no botão Run e escolha a opção de executar como uma aplicação Java comum: Página 11

figura 7: execução do programa Repare que todas as solicitações de logging foram atendidas por nosso logger, conforme mostra a figura 8, pois ele está configurado, de acordo com o arquivo de configuração, para atender a solicitações a partir do nível INFO. Página 12

figura 8: execução das solicitações de logging Sem modificar nosso código, vamos alterar o nível de INFO para WARN, no arquivo log4j.properties: Página 13

figura 9: configuração do nível de logging para WARN Repare também, na imagem acima, que foi criado um arquivo chamado exemplo.log, conforme indicado no arquivo de configurações. Agora execute a aplicação e informe uma letra, ao invés de um número, para o primeiro painel que surge. Você verá que as solicitações de logging com nível INFO feitas através do método info não são atendidas, somente a solicitação de nível ERROR, conforme mostra a figura 10. Página 14

figura 10: é efetuado somente o logging de nível ERROR Esta facilidade de configuração nos permite adicionar solicitações de logging em tempo de projeto, que podem, em tempo de produção, ser desabilitadas. Para evitar um processamento desnecessário, podemos ainda realizar um teste antes da solicitação de um logging, checando o nível de logging habilitado para o logger: if (logger.isinfoenabled()) { logger.info("informação!"); Conclusão A utilização de logging em aplicações é de extrema importância, uma vez que durante o desenvolvimento ajuda no debbug, e em produção permite registrar eventos importantes ao longo da execução e rastrear problemas ocorridos. Este tutorial teve o objetivo de apresentar o framework Log4J, que é uma das principais alternativas dentre os frameworks de logging disponíveis. Foram apresentadas suas principais características, uma das formas de configuração, e sua utilização em uma aplicação prática. Página 15

Referências Apache Log4j http://logging.apache.org/log4j/ Goyal, Vikram - Build Flexible Logs With log4j http://www.onjava.com/pub/a/onjava/2002/08/07/log4j.html Página 16