Pergunta

Fundo: Eu herdei uma aplicação web que se destina a criar conexões on-the-fly entre o equipamento local e remoto. Há um número enorme de peças móveis recentemente: o aplicativo em si mudou significativamente; o conjunto de ferramentas de desenvolvimento foi apenas atualizado; e tanto o equipamento local e remoto foram "modificado" para apoiar essas mudanças.

O lado bom é que ele tem um sistema de registro razoável que irão escrever mensagens de depuração para um arquivo, e ele irá registrar tanto o arquivo e uma tela de usuário em tempo real. Eu tenho a oportunidade de re-trabalho todo o mecanismo log / debug.

Exemplos:

  • Todas as mensagens são e prefixado com um nível de gravidade com carimbo de tempo.
  • Logs são para o cliente. Eles registrar as respostas do sistema aos seus / suas solicitações.
  • Qualquer registro que identifica um problema também sugere uma solução.
  • Depura são para desenvolvedores e suporte técnico. Eles revelam o funcionamento interno do sistema.
  • Depura indicar a função e / ou linha que os gerou.
  • O cliente pode ajustar o nível de depuração em tempo real para definir a verbosidade.

Pergunta:? O que as melhores práticas tê-lo usado como um desenvolvedor, ou visto como um consumidor, que geram logs e debugs úteis


Editar: Muitas sugestões úteis, até agora, muito obrigado! Para esclarecer: eu estou mais interessado em o para iniciar sessão:. Conteúdo, formato, etc .-- e as razões para fazê-lo - do que ferramentas específicas

O que foi sobre os melhores registros que você já viu que os fez mais útil?

Obrigado por sua ajuda!

Foi útil?

Solução

O absolutley coisa mais valiosa feito com qualquer estrutura de log é uma ferramenta "1-click" que reúne todos os registros e enviá-los para mim mesmo quando o aplicativo é implantado em uma máquina pertencente a um cliente.

E fazer boas escolhas no que fazer logon para que possa seguem aproximadamente os principais caminhos em sua aplicação.

Como os quadros que eu usei os padrões (log4net, log4java, log4c ++)

NÃO implementar sua própria estrutura de log, quando já existe uma boa out-of-the-box. A maioria das pessoas que apenas reinventar a roda.

Outras dicas

Algumas pessoas nunca usar um depurador, mas registra tudo. Isso é filosofias diferentes, você tem que fazer sua própria escolha. Você pode encontrar muitos conselhos como estes , ou esta . Note-se que estes conselhos não são linguagem relacionada ...

Coding Horror cara tem um posto interessante sobre login problema e porque o registo abusivo poderia ser um desperdício de tempo em certos condições.

Eu simplesmente acredito que o registo é para rastrear coisas que poderiam permanecer na produção. Debug é para o desenvolvimento. Talvez seja uma maneira muito simples de ver as coisas, porque algumas pessoas usam registos para a depuração, porque eles não podem ficar depuradores. Mas depurador de modo pode ser um desperdício de tempo também:. Você não tem que usá-lo como uma espécie de caso de teste, porque Não é escrito e irá desaparecer após sessão de depuração

Então eu acho que minha opinião sobre isso é:

  • log para traços necessários e úteis através de ambientes de desenvolvimento e produção, com níveis de desenvolvimento e produção, com o uso de um quadro de log ( log4 ferramentas familiares)
  • depuração em modo de casos estranhos especiais quando as coisas estão saindo do controle
  • casos de teste são importantes e podem salvar tempo gasto em sessões de depuração labirínticas infernal, utilizada como um método anti-regressão. Note-se que a maioria das pessoas não usam casos de teste.

Coding Horror disse resistir à tendência de registrar tudo . Isso é certo, mas eu já vi um aplicativo hudge que faz exatamente o contrário de uma forma bonita (e através de um banco de dados) ...

Do Logging não confundir, rastreamento e relatório de erros, algumas pessoas que eu conheço fazer e ele cria um inferno de um arquivo de log de grep através, a fim de obter as informações que eu quero.

Se eu quiser ter tudo agitado, eu separar para o seguinte:

  • Tracing -> lixeiras cada ação e passo, timestamped, com entrada e dados de saída do referido estágio (feio e maior arquivo)
  • Registro -> passos Log o processo de negócio única, cliente faz inquérito para que o log os critérios de consulta e dados de saída nada mais.
  • Relatório de erros / depuração -> exceções registradas detalhando onde Ocorreu, timestamped, input / output dados se as informações possíveis, o usuário etc

Dessa forma, se ocorreram quaisquer erros eo log de erro / Debug não contém informação suficiente para o meu gosto eu sempre pode fazer uma grep -A 50 -B 50 'timestamp' tracing_file para obter mais detalhes.

EDIT: Como também já foi dito, que adere a pacotes standard como a construída no módulo de registo para pitão como um exemplo é sempre boa. Rolling seu próprio não é uma grande idéia, a menos que a língua não tem um no-lo da biblioteca padrão. Eu gosto envolvendo a exploração madeireira em uma pequena função, geralmente levando a mensagem e valor para determinar quais registros ele vai para, ie. 1 - rastreamento, 2 - logging, 4 -. A depuração de modo a enviar um valor de 7 gotas a todos os 3 etc

Gostaria apenas de configurar o seu sistema de registro de ter vários níveis de registo, sobre os serviços que eu escrevo eu tenho um logging / auditoria para quase todas as ações e é atribuído um nível de auditoria 1-5 quanto maior o número, mais eventos de auditoria que você começa .

  1. O registro muito básico: iniciar, parar e reiniciar
  2. logging básica: Processamento x número de arquivos etc
  3. logging Standard: Começando a Processing, processamento acabada, etc
  4. logging avançada: início eo fim de cada etapa de processamento
  5. Tudo: cada ação tomada

você definir o nível de auditoria em um arquivo de configuração para que ele possa ser alterado na mosca.

Algumas regras de polegar geral que eu encontrei para ser útil em aplicações do lado do servidor:

  • requestID - atribuir um ID solicitação para cada solicitação de entrada (HTTP) e, em seguida, log que em cada linha do registro, assim você pode facilmente grep esses logs posteriores por esse ID e encontrar todas as linhas relevantes. Se você acha que é muito tedioso para adicionar essa identificação a cada declaração de registro, então, pelo menos estruturas madeireiras java tornaram transparente com o uso de mapeada diagnóstico Contexto (MDC).
  • objectID - Se sua aplicação / serviço com manipulação de alguns objetos de negócios que têm a chave primária, então é útil para anexar também que a chave primária para o contexto de diagnóstico. Mais tarde, se alguém vem com a pergunta "quando foi este objeto manipulado?" você pode facilmente grep pela objectID e veja todos os registros de log relacionadas a esse objeto. Neste contexto, é (às vezes) útil para realmente usar Nested Context diagnóstico vez de MDC .
  • quando log -? Pelo menos você deve fazer logon sempre que atravessar um importante serviço / limite componente. Dessa forma, você pode mais tarde reconstruir a chamada de fluxo e detalhamento para a base de código especial que parece causar o erro.

Como eu sou um desenvolvedor Java, eu vou também dar a minha experiência com Java APIs e frameworks.

API

Eu recomendo usar simples Logging Facade for Java (SLF4J) - em minha experiência, é a melhor fachada para o registo:

  • full-featured: ela não seguiu o mínimo denominador-comum abordagem (como commons-logging); em vez disso, ele está usando degradar normalmente abordagem.
  • tem adaptadores para praticamente todas as estruturas populares madeireiras Java (por exemplo log4j)
  • tem soluções disponíveis sobre como redirecionar todas as APIs de registro legado (log4j, commons-logging) para SLF4J

Implementação A melhor aplicação para uso com SLF4J é logback -. Escrito pelo mesmo cara que também criou SLF4J API

Use um formato existente exploração madeireira, como o usado pelo Apache, e você pode, então, o sobreposto sobre as muitas ferramentas disponíveis para analisar o formato.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top