Log4j é um Framework utilizado para o desenvolvimento de Softwares que necessitam de recursos de
geração de logs. Bem, o Tomcat já possui estes recursos, basta que sejam ativados.
Segue os passos para ativar a
geração de logs e o rotacionamento de arquivos de log:
Baixe o Log4j e o commons-logging:
- Log4j ->http://logging.apache.org/site/binindex.cgi
- Commons-logging
->http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi
Descompacte os dois arquivos,
entre no diretório descompactado do Log4j vá em dist/lib, copie o .jar para
$TOMCAT_HOME/common/lib.
Agora entre no diretório
descompactado do commons-logging, copie o commons-logging-x.x.jar para
$TOMCAT_HOME/common/lib
Crie o arquivo de configuração
log4j.properties dentro de $TOMCAT_HOME/common/classes
Conteúdo e descrição do arquivo:
# Início - log4j.properties
log4j.rootLogger=INFO, LOG
log4j.appender.LOG=org.apache.log4j.RollingFileAppender
log4j.appender.LOG.layout=org.apache.log4j.PatternLayout
log4j.appender.LOG.layout.ConversionPattern=%d
[%t] %p %c - %m%n
log4j.appender.LOG.File=$TOMCAT_HOME/logs/catalina.out
log4j.appender.LOG.MaxFileSize=10MB
log4j.appender.LOG.MaxBackupIndex=10
# Fim
Conceitos importantes:
Appender - Qual os destinos
das mensagens de log (arquivos, console, email etc.).
Layout - Formatação das
mensagens de log.
log4j.rootLogger=INFO, LOG
-> Define o nível das mensagens de log e um nome para o appender, os níveis
podem ser: INFO, DEBUG, WARN, ERROR, FATAL,ALL e OFF.
log4j.appender.LOG=org.apache.log4j.RollingFileAppender
-> Define o appender, neste caso o appender RollingFileAppender é utilizado
para rotacionar os arquivos de log. Existem vários appenders diferentes, como
por exemplo SMTPAppender utilizado para enviar as mensagens de log por email.
log4j.appender.LOG.layout=org.apache.log4j.PatternLayout
-> Define qual layout (formatação das mensagens) será usado, PatternLayout
depende da regra abaixo.
log4j.appender.LOG.layout.ConversionPattern=%d
[%t] %p %c - %m%n -> Personalização da saída das mensagens, descrição:
- %d - Mostra a data e a hora
em que a mensagem foi gerada.
- %t - Mostra qual thread
gerou a mensagem.
- %p - Mostra o nível das
mensagens.
- %c - Mostra a classe que
gerou o erro.
- %m - Mostra a mensagem de
log.
- %n - Quebra a linha.
Exemplo:
- 2006-06-20 15:20:26,122 [main] INFO
org.apache.catalina.startup.Catalina -
Server startup in 54689 ms
-
log4j.appender.LOG.File=$TOMCAT_HOME/logs/catalina.out -> Caminho onde será
armazenado o arquivo de log.
- log4j.appender.LOG.MaxFileSize=10MB
-> Tamanho máximo que o arquivo pode
atingir antes de ser
rotacionado.
-
log4j.appender.LOG.MaxBackupIndex=10 -> Numero de arquivos utilizados para o
rotacionamento.
Depois de tudo isso basta iniciar o Tomcat para que
Log4j entre em ação.
OBS (opcao na instalacao):
descompacte o arquivo
jakarta-log4j-X.X.X.zip em um diretório de sua escolha e adicione a seguinte
entrada ao seu CLASSPATH:
<diretório onde você
descompactou o log4j>/dist/lib/log4j-X.X.X.jar
Está na hora de colocar o
Log4J pra funcionar. Primeiramente, é preciso saber que o Log4J divide os logs
em níveis hierárquicos (do nível mais baixo ao mais severo):
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
Isso traz uma grande vantagem:
é possível ajustar o nível de logging que você quer utilizar. Por exemplo: se
você, testando sua aplicação, insere instruções de nível DEBUG, você poderia
facilmente desligar este nível depois dos testes sem precisar apagar as
instruções dentro do código.
Vamos aos exemplos:
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.BasicConfigurator;
public class LoggingTest {
static
Logger logger = Logger.getLogger(LoggingTest.class);
public
static void main(String[] args) {
BasicConfigurator.configure();
logger.setLevel(Level.INFO);
logger.debug(?Isso
nao vai aparecer...?);
logger.info(?Inicializando...?);
try {
throw new Exception(?Loga esse,
Log4J!?);
} catch (Exception e) {
logger.error(?Oops, deu erro: ? +
e.getMessage());
}
logger.info(?Finalizando...?);
}
}
No código acima, o objeto da
classe Logger é usado para enviar as mensagens de log. Primeiramente, é chamado
o método
1 BasicConfigurator.configure()
, que inicializa o sistema de
logging com as configurações padrão. A seguir, o método setLevel() é utilizado
para ajustar o nível de logging para INFO. A primeira instrução que realmente
envia uma mensagem para o log é logger.debug(?Isso não vai aparecer...?);
Note que o nível de logging
foi ajustado para INFO, que é um nível acima de DEBUG, portanto essa instrução
não enviará nada para o log.
É possível enviar as mensagens
de log para mais de um dispositivo de saída. Por exemplo: quando você faz uma
chamada ao método configure() da classe BasicConfigurator, o Log4J é iniciado
com a sua configuração padrão. Porém, muitas vezes é interessante armazenar um
arquivo de log, para que as mensagens possam ser analisadas posteriormente.
Para solucionar esse problema, o Log4J implementou os Appenders.
Um appender representa um
dispositivo de saída de log. Para que um arquivo seja criado com as mensagens
de log da sua aplicação, é necessário registrar um FileAppender para sua
instância de Logger. Isto é feito através do método addAppender(). Exemplo:
import
java.io.IOException;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.BasicConfigurator;
public class LoggingToFile {
static
Logger logger = Logger.getLogger(LoggingToFile.class);
public
static void main(String[] args) throws IOException {
BasicConfigurator.configure();
/* Cria um novo FileAppender baseado no
layout padrão,
* pré-definido na constante
TTCC_CONVERSION_PATTERN
* da classe
PatternLayout. */
Appender fileAppender = new FileAppender(
new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN),
?myLogFile.log?);
logger.addAppender(fileAppender);
try {
throw new Exception(?Loga esse no arquivo, Log4J!?);
} catch (Exception
e) {
logger.error(?Oops, deu erro: ? + e.getMessage());
}
}
}
A novidade no código acima
fica por conta da parte que registra um novo appender, no caso, um
FileAppender, que armazena as mensagens de log em um arquivo. O construtor de
FileAppender aceita dois argumentos: o primeiro é o Layout das mensagens; o
segundo, o nome do arquivo de log que será criado. Vale lembrar que se o
arquivo especificado já existir, as mensagens serão escritas no final do
arquivo, mantendo o conteúdo já existente; senão, o Log4J criará o arquivo para
você.
Além do FileAppender, existem
ainda as classes ConsoleAppender (padrão, para mensagens no console),
JDBCAppender (banco de dados), SMTPAppender (servidores de e-mail SMTP),
SocketAppender (para servidores remotos) e IMAppender (para instant messengers!).
No nosso exemplo, as mensagens
serão gravadas com o mesmo layout das mensagens padrão que vão para o console.
Este layout é pré-definido na constante TTCC_CONVERSION_PATTERN da classe
PatternLayout. Existem vários outros layouts que podem ser usados,
representados pelas classes SimpleLayout, DateLayout, HTMLLayout e XMLLayout.
Todas essas classes estendem a superclasse abstrata Layout. Além desses layouts
pré-definidos, você pode criar seu próprio layout, criando uma subclasse de
Layout e implementando seus métodos.
Nenhum comentário:
Postar um comentário