Quero adicionar o log a um aplicativo no qual estou trabalhando atualmente. Eu adicionei o log antes, isso não é um problema aqui.
Mas, de uma perspectiva de design em uma linguagem orientada a objetos, quais são as práticas recomendadas para o log que seguem os padrões e padrões de operação?
Nota: No momento, estou fazendo isso em C #, portanto, exemplos em C # são obviamente bem-vindos. Eu também gostaria de ver exemplos em Java e Ruby.
Edit: Estou usando log4net. Só não sei qual é a melhor maneira de conectá-lo.
fonte
Como você está fazendo isso em C #, recomendo que você analise o NLog e o ElMAH. Eles podem ser facilmente instalados usando o NUGET. Coloquei alguns links para os que estão abaixo, para que você possa obter mais informações.
fonte
Pessoalmente, tomo a estrutura de log de escolha (no meu caso, Entlib porque trabalho com .NET) e escrevo um aspecto de AOP para o log.
Você pode atribuir quaisquer métodos / propriedades / classes / espaços para nome e adicionar log a eles sem sobrecarregar a fonte.
fonte
O sistema em que estou trabalhando atualmente usa uma arquitetura e mensagens orientadas a eventos, para que a maioria das ações em nosso sistema seja o resultado de um comando e elas resultem em eventos (como classes DTO despachadas, em vez de um evento delegado padrão). Anexamos manipuladores de eventos cujo único objetivo é lidar com o log. Esse design nos ajuda a não nos repetirmos, e também não precisamos modificar o código existente para adicionar / alterar a funcionalidade.
Aqui está um exemplo de uma dessas classes de log, que lida com todos os eventos a serem registrados em uma seção estreita do nosso aplicativo (aqueles referentes a uma fonte de conteúdo específica da qual importamos).
Não direi necessariamente que essa é uma prática recomendada, pois pareço mudar de idéia sobre o que e como fazer log frequentemente - e toda vez que preciso usar um log para diagnosticar um problema, inevitavelmente encontro maneiras de fazer melhorias no informações que eu registro.
Eu direi, no entanto, que gravar as informações pertinentes (especialmente de uma maneira Ctrl-F / localizar pesquisável) é a parte mais importante.
A segunda parte mais importante é obter o código de registro longe de sua lógica principal - ele pode fazer um método feio e longo e complicado muito rapidamente.
fonte
Como outros já disseram, use
log4j
oulog4net
ou alguma outra estrutura de log bem construída.Costumo não gostar de código de log que atrapalhe a lógica de negócios. É por isso que eu uso
Log4PostSharp
. Isso significa que eu posso usar a Programação Orientada a Aspectos para anotar métodos como este:Ou todo método em uma montagem como esta:
fonte
Não tenho certeza se alguma estrutura faz isso, mas, de uma perspectiva de design, modelaria as informações que precisam ser registradas principalmente em três categorias:
Nas duas primeiras categorias, minha estrutura de log ideal deve tratá-las como um processo pós-compilação e transparente para os desenvolvedores. Seria bom adicionar declarativamente o log aos assemblies, algo como o seguinte:
Para a 3ª categoria, os programadores podem apenas criar um ou mais métodos de "registro" dedicados e aproveitar o rastreamento da primeira categoria. Os métodos de log nada fazem além de servir um ponto de stub no qual as regras de rastreamento podem ser aplicadas.
fonte