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