Foi então que pesquisando um pouco no google vimos que há como criar nossos próprios Appender's do Log4j, e é sobre isso que eu vou falar hoje.
Para criar um novo appender vamos estender a classe abstrata AppenderSkeleton, que já provê todas as funcionalidades básicas para tratamento da mensagem. São obrigatórios a implementação de 3 métodos:
close(): Utilizado para liberar os recursos alocados pelo appender como arquivos, conexões de rede, etc.
requiresLayout(): Indica se o appender necessita de um layout configurado para funcionar. Em casos onde o appender pode trabalhar com ou sem layout, o método deve retornar true;
append(LoggingEvent event): É o método principal que devemos implementar, é onde residirá o nosso tratamento customizado do log. Ele recebe um argumento do tipo LoggingEvent, que tem várias atributos como o Level da mensagem, a mensagem, a causa do erro em caso de exceções, etc.
Ok, agora vamos ver um pouco de código. Crie um projeto Maven e adicione as seguintes dependencias:
log4j log4j 1.2.16 commons-lang commons-lang 2.6
Em seguida crie uma classe chamada TextAreaAppender e implemente os métodos necessários.
public class TextAreaAppender extends AppenderSkeleton {
//Outro métodos foram omitidos para simplificar o exemplo
@Override
protected void append(LoggingEvent event) {
//formata a mensagem de acordo com o layout
String formatted = getLayout().format(event);
jTextArea.append(formatted);
// Se a mensagem possuí informações sobre a exceção que causou o erro
if (event.getThrowableInformation() != null) {
jTextArea.append(ExceptionUtils.getFullStackTrace(event
.getThrowableInformation().getThrowable()));
}
}
}
Agora vou criar uma aplicação para exemplificar a configuração do Appender
public class Main extends JFrame {
public static void main(String[] args) {
Main main = new Main();
main.init();
}
private void init() {
textLogArea = new JTextArea();
//Criação dos demais componentes visuais
//Instancia o nosso Appender
TextAreaAppender appender = new TextAreaAppender(textLogArea);
//Adiciona o appender ao logger
Logger.getRootLogger().addAppender(appender);
logger.info("Log inicializado");
}
}
O projeto completo está disponível no meu github.
Nenhum comentário:
Postar um comentário