Recentemente estavamos trabalhando em um projeto de migracao de dados em Java, e foi criada uma pequena interface para interagir com o usuario utilizando Swing. Em dado momento, decidimos incluir um JTextArea para mostrar ao usuario as informacoes emitidas pelo log do programa, no caso, utilizando Log4j, para que o mesmo pudesse acompanhar com mais detalhes o que o conversor estava fazendo no momento.Foi entao que pesquisando um pouco no google vimos que ha como criar nossos proprios Appender's do Log4j, e e sobre isso que eu vou falar hoje.Para criar um novo appender vamos estender a classe abstrata AppenderSkeleton, que ja prove todas as funcionalidades basicas para tratamento da mensagem. Sao obrigatorios a implementacao de 3 metodos:close(): Utilizado para liberar os recursos alocados pelo appender como arquivos, conexoes 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 metodo deve retornar true;append(LoggingEvent event): E o metodo principal que devemos implementar, e onde residira o nosso tratamento customizado do log. Ele recebe um argumento do tipo LoggingEvent, que tem varias atributos como o Level da mensagem, a mensagem, a causa do erro em caso de excecoes, etc.Ok, agora vamos ver um pouco de codigo. Crie um projeto Maven e adicione as seguintes dependencias: log4j log4j 1.2.16 commons-lang commons-lang 2.6Em seguida crie uma classe chamada TextAreaAppender e implemente os metodos necessarios.public class TextAreaAppender extends AppenderSkeleton { //Outro metodos 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 possui informacoes sobre a excecao que causou o erro if (event.getThrowableInformation() != null) { jTextArea.append(ExceptionUtils.getFullStackTrace(event .getThrowableInformation().getThrowable())); } }}Agora vou criar uma aplicacao para exemplificar a configuracao do Appenderpublic class Main extends JFrame { public static void main(String[] args) { Main main = new Main(); main.init(); } private void init() { textLogArea = new JTextArea(); //Criacao 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 esta disponivel no meu github. E um fato que os "bancos de dados" chamados NoSQL(Not only Sql) estao ganhando cada vez mais destaque, pela sua versatilidade e performance. Sao implementacoes para armazenar tipos de dados especificos como: key-value (redis, riak), document(CouchDB, MongoDB), column family(Cassandra, H-Base), graph(Neo4j).Eu optei por experimentar o MongoDB, pois alem de ser um dos mais populares, o mesmo possui opcao de download para windows 32-bit e 64bit, e tambem existem driver's disponiveis para Delphi, sao eles: TMongoWire, pebongo e tambem um driver de minha autoria mongo-delphi-driver. Hoje vou me ater apenas a instalacao e acesso ao MongoDB pelo shell, mais num proximo artigo vou abordar o consumo do servico pelo Delphi. Confira aqui os demais drivers existentes e tutoriais especifico de cada driver.Voce pode baixar a instalador compativel com o seu SO aqui. E reforcando o aviso do site, a versao de 32-bit suporta algo em torno de 2GB de dados, portanto, deve ser utilizada apenas para testes.