1
|
- Prof. Eduardo Bezerra
- e
- Prof. Ismael H F Santos
|
2
|
- Modulo II - Tópicos em JAVA
- Logging
- Log4j
- Componentes
- Logger (classe)
- Appender (interface)
- Layout (classe)
- Configuração
- Resumo
|
3
|
- Linguagem de Programação JAVA
- Ismael H. F. Santos, Apostila
UniverCidade, 2002
- The Java Tutorial: A practical guide for programmers
- Tutorial on-line: http://java.sun.com/docs/books/tutorial
- Java in a Nutshell
- David Flanagan, O´Reilly &
Associates
- Just Java 2
- Mark C. Chan, Steven W. Griffith
e Anthony F. Iasi, Makron Books.
- Java 1.2
- Laura Lemay & Rogers
Cadenhead, Editora Campos
|
4
|
- Core Java 2, Cay S. Horstmann, Gary Cornell
- Volume 1 (Fundamentos)
- Volume 2 (Características Avançadas)
- Java: Como Programar, Deitel & Deitel
- Thinking in Patterns with JAVA, Bruce Eckel
- Gratuito. http://www.mindview.net/Books/TIJ/
|
5
|
|
6
|
- Logging: manutenção do registro do comportamento de uma aplicação.
- Por que realizar logging?
- Mensagens de log podem ajudar na depuração da aplicação.
- Mensagens de log fornecem o contexto da execução de uma aplicação
|
7
|
- Quando utilizar logging?
- Na fase de desenvolvimento: para depurar a aplicação.
- O que houver de errado? Onde ocorreu? Por que ocorreu?
- Na fase de produção: ajuda a resolver problemas de execução.
- (Desvantagem) instruções de log têm o potencial de aumentar o tamanho do
executável e de reduzir a velocidade da aplicação.
|
8
|
|
9
|
- Log4j é um projeto de código aberto (open source) que permite ao
desenvolvedor incluir logging em sua aplicação.
- http://logging.apache.org
- Fornece serviços de logging para auditoria e depuração de aplicações.
- Com o Log4j, podemos ativar e desativar o logging sem a necessidade de
modificar os binários da aplicação.
- Isso pode ser controlado apenas editando um arquivo de configuração
(detalhes mais adiante).
|
10
|
- Permite o controle dinâmico de:
- Destino da saída de log (email, console, SGBD, arquivo do SO,
servidores de log, etc.)
- Que informação deve ser registrada
- Formatação da saída (texto, HTML, XML, etc)
- Foi implementado para outras linguagens além de Java:
- C, C++, C#, Perl, Python, Ruby e Eiffel
|
11
|
- A versão atual do Log4J é a 1.2.8
- http://logging.apache.org/log4j/docs/download.html
- disponíveis o código fonte e as bibliotecas (.jar)
- Faça a descompactação dos arquivos para alguma pasta.
- Adicione a biblioteca (.jar) do log4J no classpath da aplicação.
- Nome do arquivo da biblioteca: log4j-xxx.jar (onde xxx é a versão).
|
12
|
|
13
|
- A API do Log4j tem os seguintes componentes principais:
- Logger (classe)
- Appender (interface)
- Layout (classe)
- Há também componentes acessórios (auxiliares):
- Level
- PropertyConfigurator, DOMConfigurator
- Vamos agora detalhar esses componentes...
|
14
|
- O ponto de entrada para o log4j é um objeto Logger.
- Criamos um objeto dessa classe e requisitamos a ele que faça o log de
mensagens.
- Há diversos métodos de log (i.e., métodos que aceitam como argumento uma
mensagem de log) existentes em Logger.
- Além disso, todo objeto da classe Logger possui duas propriedades
importantes:
|
15
|
- O nível de um objeto logger determina que mensagens de log são realmente
consideradas por este objeto.
- Mensagens com nível igual ou mais alto que o nível definido para o
logger são enviadas para a saída.
- Há 8 níveis, definidos como constantes (inteiras) na classe Level
(também do log4j):
- DEBUG < INFO < WARN < ERROR < FATAL
- ALL (nível mais baixo) e OFF (nível mais alto)
|
16
|
- Um logger pode ser definido em um desses níveis
- O método setLevel permite definir o nível do logger.
|
17
|
- O Log4j registra uma mensagem sse o método de log utilizado corresponde
a um nível que é igual ou maior que o nível do logger.
- Exemplo:
|
18
|
- Método de log = método chamado quando desejamos registrar uma mensagem
no log na aplicação.
- São os métodos de log existentes na classes Logger são: debug, info, warn,
error e fatal.
- Cada um desses métodos está associado a um nível, correspondente ao seu
nome.
- e.g., logger.info(“Servidor Levantado") é uma requisição de log no
nível INFO.
|
19
|
- Habilitação versus desabilitação
- Diz-se que uma mensagem de log está habilitada se o nível do método de
log utilizado for maior ou igual ao nível do logger.
- Do contrário, diz-se que a mensagem está desabilitada.
|
20
|
|
21
|
|
22
|
|
23
|
- Use debug para mensagens de depuração, que não devem ser gravadas quando
a aplicação estiver em produção.
- Use info para mensagens similares ao modo "verbose".
- Use warn para avisos, que são gravados em algum lugar. Avisos não devem
corresponder a situações em que a aplicação deve parar de executar.
- Use error para mensagens que são registradas por conta de algum erro recuperável
da aplicação.
- Use fatal para mensagens críticas; após a gravação das mesmas, a
aplicação deve ser abortada.
|
24
|
- O padrão de nomenclatura para objetos da classe Logger é semelhante ao
encontrado para classes em Java.
- (i.e. com.pdxinc é “pai” de com.pdxinc.nhinar)
- Prática normalmente utilizada: aproveitar o nome de uma classe como o
nome do seu logger.
|
25
|
- No log4j, Appender é uma interface que representa o destinatário da
saída do log.
- Um logger pode ter vários appenders associados a ele.
- Ou seja, o Log4j permite que uma requisição de log seja enviada para
mais de um objeto que implemente Appender.
|
26
|
- O método addAppender da classe Logger adiciona um objeto Appender a um
certo logger.
- Há diversas classes que implementam a interface Appender...
|
27
|
- ConsoleAppender: envia requisições de log para a saída padrão
(System.out ou System.err).
- FileAppender: envia requisições de log para um arquivo
- RollingFileAppender
- subclasse de FileAppender,
- pode fazer um backup do arquivo sempre que ele atingir um determinado
tamanho.
|
28
|
- DailyRollingFileAppender
- subclasse de FileAppender,
- pode fazer um backup de tempos em tempos (e.g, a cada semana).
- SMTPAppender - appender para enviar o log para um destinatário de e-mail
- SocketAppender - envia os eventos de log para um servidor de logs remoto
através do protocolo TCP.
|
29
|
- NTEventLogAppender - envia para o sistema de log de uma máquina com
plataforma Windows.
- SyslogAppender - envia os logs para um daemon (monitor de logs) remoto
- JMSAppender - envia os logs como uma mensagem JMS
- AsyncAppender - possibilita que os logs sejam coletados em um buffer e
depois enviados para um ou mais appender anexados a ele.
|
30
|
|
31
|
|
32
|
- Além de registrar mensagens de log, o Log4j pode também registrar:
- Instante (data e hora) em que o log
foi requisitado,
- Prioridade da mensagem (DEBUG, WARN, FATAL etc.),
- Nome da classe, nome do método, número da linha no código fonte, onde o
log foi requisitado,
- etc
- O formato do que é registrado em log é especificado no layout ao qual o
appender é associado.
|
33
|
- Um appender deve ter um Layout associado.
- Layout é a classe base do Log4j responsável pela formatação da saída
para um certo objeto Appender.
- Classes do Log4j que especificam a formação estendem Layout
|
34
|
- Há no log4j diversas subclasses de Layout predefinidas:
- SimpleLayout: imprime o nível, o símbolo '-' e a mensagem de log.
- HTMLLayout formata a saída como HTML.
- XMLLayout formata a saída como XML.
- PatternLayout formata
a saída usando um
padrão de
conversão.
- DateLayout
|
35
|
|
36
|
|
37
|
|
38
|
- As configurações do log4j não devem ser feitas no código fonte.
- Isso porque é desejável mudar as opções de logging ser ter que
recompilar a aplicação.
- Modo adequado: através de um arquivo de configuração.
- Há dois modos de especificar o arquivo de configuração:
- Arquivo de propriedades (PropertyConfigurator)
- Arquivo XML (DOMConfigurator)
|
39
|
- Considere o seguinte arquivo de propriedades:
|
40
|
- Considere que o arquivo de propriedades anterior foi passado como
argumento para o programa a seguir:
|
41
|
- O arquivo de log criado a partir do programa anterior:
- Terá o nome HTMLLayout.html,
- Terá como conteúdo uma tabela HTML com as mensagens de log em cada
linha da tabela.
|
42
|
- Para cada mensagem, terá:
- o tempo (em milisegundos) decorrido desde quando o programa foi
iniciado,
- a thread que disparou o log,
- o nível de prioridade,
- (se LocationInfo = true) a classe, o nome do arquivo *.java desta
classe e o número da linha,
- a mensagem de log propriamente dita.
|
43
|
- r - número de milissegundos transcorridos desde o início do programa
- t - nome da thread que gerou o evento de log
- p - prioridade (o -5 indica que deve alinhar à direita se o número de
caracteres for menor que cinco)
|
44
|
- c - nome da classe (2 indica que se o nome completo da classe for
"a.b.c" por exemplo, deverá ser mostrado apenas
"b.c")
- m - é a mensagem (não pode faltar !)
- n - é o separador de linhas do SO ("\n" ou "\r\n“)
|
45
|
|
46
|
- Principais componentes:
- Logger: permite realizar requisições de log.
- Appender: corresponde ao destinatário de uma mensagem de log.
- Layout: especifica o formato de uma mensagem de log
|
47
|
- Propriedades de um objeto Logger
- Hierarquia de loggers oferece um maior controle;
- Diversas saídas: Console, Arquivo, Banco de Dados, XML, HTML, e-mail,
...
- API de código aberto;
|
48
|
- Elimina a necessidade de uso de “System.out” para depuração do código
fonte;
- Permite controlar de maneira flexível as saídas de log;
- Configuração do log em tempo de execução sem alteração na codificação e
sim em um arquivo de configuração;
- Com o uso de logging, há a possibilidade de diminuição do desempenho da
aplicação.
|
49
|
- log4j.rootLogger=DEBUG, htmlAppender
- log4j.appender.htmlAppender=org.apache.log4j.ConsoleAppender
- log4j.appender.htmlAppender.layout=org.apache.log4j.PattenLayout
- log4j.appender.htmlAppender.layout. ConversionPattern=%-4r [%t] %-5p %c
- %m%n
|
50
|
- Site do Log4j
- http://jakarta.apache.org/log4j/docs/index.html
|