Alguém aqui sabe como customizar de forma ampla o comportamento de escrita de logs do Rails?
Eu quero criar uma gem que uma vez utilizada em um projeto faça com que a aplicação não mais escreva os logs em arquivos de texto como development.log ou production.log. Os logs passariam a ser inseridos em um banco de dados CounchDB através de uma chamada a uma API REST de uma aplicação cujo objetivo é centralizar o log de várias aplicações.
Eu imagino que pra fazer isso teria que fazer monkey patching no mecanismo de logs do Rails, mas não faço idéia de que parte exatamente eu deveria redefinir.
Alguém aqui sabe algo que poderia me ajudar nessa tarefa?
Bastaria vc fazer algo como
ActiveRecord::Base.logger = YouLogger.new
perguntinhas:
Se vc centralizar os seus logs em uma applicação vc não teria um ponto unico de falha?
E usar rest para logar vc esta preparado para um erro 500, bufferizar o resultado e tentar novamente?
Edit:
Vc poderia usar o Scribe, que é o que o twitter usa para fazer logging
http://www.slideshare.net/kevinweil/nosql-at-twitter-nosql-eu-2010 (slide 18)
[quote=peczenyj]Bastaria vc fazer algo como
ActiveRecord::Base.logger = YouLogger.new
[/quote]
Pois é, acabei de descobrir que com o config.logger = MyLogger.new no environent.rb eu posso definir uma classe pra gerenciar os logs de uma aplicação Rails. Aliás, eu provavelmente já li isso em algum lugar, mas a minha memória não trabalha muito a meu favor.
De fato. E se for me perguntar, pra fins práticos e em cenários reais, eu não acho necessário que uma empresa tenha uma aplicação responsável por administrar o log de todas as demais. E se tivesse, não sei se faria isso desta maneira. No entanto, o projeto em questão é mais uma prova de conceito, para testar, entre outras coisas, o comportamento do MongoDB em uma situação onde ele receberá uma carga razoavelmente alta.
Não tinha parado pra pensar nisso, mas de fato você está certo, usar uma interface REST pra isso introduz esse problema, ainda mais em um cenário onde essa interface seria usada o tempo todo. Contudo, nesse caso eu confesso não conhecer uma alternativa melhor, dado a necessidade de implementar este cenário: uma aplicação que centraliza os logs de todas as outras através de um banco de dados MongoDB.
Sempre considerei interfaces REST como uma das melhores opções para integrar sistesmas, por isso nesse caso realmente não sei que outra opção usar, já que acessar o MongoDB diretamente não me parece uma boa idéia.
[/quote]
Vou dar uma olhada.
Obrigado pelas dicas e também pelas perguntas (é sempre bom se questionar se o que você está fazendo é certo).