Pergunta

Descobri como converter erros em exceções e os exibo muito bem se não forem detectados, mas não sei como registrá-los de maneira útil.Simplesmente gravá-los em um arquivo não será útil, não é?E você arriscaria acessar um banco de dados, quando ainda não sabe o que causou a exceção?

Foi útil?

Solução

Eu realmente gosto log4php para registro, mesmo que ainda não tenha saído da incubadora.Eu uso log4net em quase tudo e achei o estilo bastante natural para mim.

Com relação às falhas do sistema, você pode registrar o erro em vários destinos (por exemplo, ter anexadores cujo limite é CRÍTICO ou ERRO, que só entram em ação quando algo dá errado).Não tenho certeza de quão seguros são os anexadores existentes - se o banco de dados estiver inativo, como esse anexador falha? - mas você pode facilmente escrever seu próprio anexador que falhará normalmente se não for possível registrar.

Outras dicas

Você poderia usar set_error_handler para definir uma exceção personalizada para registrar seus erros.Eu pessoalmente consideraria armazená-los no banco de dados, pois o backtrace do manipulador de exceção padrão pode fornecer informações sobre o que o causou - é claro que isso não será possível se o manipulador de banco de dados acionou a exceção.

Você também pode usar log_erro para registrar seus erros.Ele tem uma escolha de destinos de mensagens, incluindo:

Citado de log_erro

  1. Registrador de sistema do PHP, usando o mecanismo de registro do sistema do sistema operacional ou um arquivo, dependendo de como a diretiva de configuração error_log está definida.Esta é a opção padrão.
  2. Enviado por e-mail para o endereço no parâmetro destino.Este é o único tipo de mensagem onde o quarto parâmetro, extra_headers, é usado.
  3. Anexado ao destino do arquivo .Uma nova linha não é adicionada automaticamente ao final da sequência da mensagem.

Editar:O markdown tem uma tag noparse para sublinhados?

Simplesmente gravá-los em um arquivo não será útil, não é?

Mas é claro que é - isso é ótimo, muito melhor do que exibi-los na tela.Você deseja mostrar ao usuário uma bela tela que diz "Desculpe, cometemos uma besteira.Os engenheiros foram notificados.Volte e tente novamente" e ABSOLUTAMENTE NENHUM DETALHE TÉCNICO, pois fazer isso seria um risco à segurança.Você pode enviar um email para uma caixa de correio compartilhada e registrar a exceção em um arquivo ou banco de dados para revisão posterior.Esta seria uma prática recomendada.

Eu os escreveria em um arquivo - e talvez configurasse um sistema de monitoramento para verificar alterações no tamanho do arquivo ou na data da última modificação.Webmin é uma maneira fácil, mas existem soluções de software mais completas.

Se você sabe que é um erro único, enviar um aviso por e-mail pode ser suficiente.No entanto, com um website com muitos acessos por minuto, não sempre envie uma notificação por e-mail.Já vi um site cair por ter centenas de e-mails por minuto sendo gerados para dizer que o sistema não conseguiu se conectar ao banco de dados.O fato de ele também ter um LoadAvg> 200 devido ao servidor de e-mail ser executado para cada nova mensagem não ajudou em nada.Nesse caso - o melhor cenário era, de longe, o watchdog verificar o tamanho dos arquivos e conectar-se a um serviço externo para enviar um SMS (talvez uma mensagem instantânea) ou fazer com que um sistema externo procurasse uma mensagem de erro em uma página da Web (que não precisa estar visível na tela - pode estar em um comentário HTML).

Acho que depende muito de onde ocorreu o seu erro.Se o banco de dados estiver inativo, registrá-lo no banco de dados não é uma boa ideia;)

Eu uso o registro de sistema() função para registrar o erro, mas não tenho problemas para gravá-lo em um arquivo quando estou em um sistema que não tem suporte a syslog.Você pode facilmente configurar seu sistema para enviar um e-mail ou uma mensagem jabber usando, por exemplo registro de registro ou o syslogd padrão.

Eu segundo log4php.Normalmente eu o configurei para enviar coisas como exceções para ERROR ou CRITITCAL e gravá-las no syslog.A partir daí, você pode inserir seu feed de syslog Zenoss, Nagios, Splunk ou qualquer outra coisa com a qual o syslog possa se comunicar.

Você também pode capturar e registrar exceções PHP usando o Formulários Google.Existe um tutorial aqui isso explica o processo.

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