Qual é a melhor maneira de obter os erros de um site de produção em PHP?

Para a maioria dos sites de produção, você quer saber quando houve um erro o mais rápido possível. Minha pergunta é como melhor obter essa informação.

Normalmente, é provavelmente melhor obter os erros em um email, pois não vou ficar sentado todos os dias e ver os logs de erros até que haja um erro - isso seria impossível, pois tenho 20 ou mais sites de produção em servidores diferentes. Esses erros podem ser qualquer coisa, incluindo variáveis ​​não definidas, dados inválidos recebidos ou erros de consulta.

At the moment I have followed the example on PHPs websites, found here. As a result, it creates a text string along with an xml file that is then sent by email. I have modified this slightly to keep all of the errors until the script ends and then send an email with the xml files attached. (I have crashed a couple mail servers sending over >500 000 emails because of an error in a loop.) Most of the time this works perfectly. (I have also created an object to do all of the error handling.)

O problema surge quando há uma grande quantidade de dados para wddx_serialize_value() para os processos. E então, se houver vários erros, acaba realmente usando muita memória, na maioria das vezes mais do que o script pode usar.

Por causa disso, adicionei uma adição gzcompress() ao arquivo xml antes de armazená-lo dentro da variável. Isso ajuda, mas se a quantidade de dados for muito grande, ainda ficará sem memória. (Em um caso recente, queria usar cerca de 2GB.)

Eu estou querendo saber que outras soluções existem para isso ou como você modificou isso para que ele funcione?

Então, alguns requisitos:

  • deve ser capaz de enviar mais do que apenas a mensagem de erro para mim e não deve me fazer logar no servidor para descobrir o que aconteceu (para que eu possa verificar quando estiver no celular e determinar se é um assunto urgente)
  • é necessário limitar o número de e-mails enviados. O melhor ainda é 1.
  • precisa logar em um arquivo conforme normal

Edit: I need other information related to the error, not just the error string. Often I find it's near to impossible to reproduce the error because it's caused by user input, which I don't know unless I get more information. I have tried my best to put in informative errors, but you never know how a user is going to use the system or what crap data they are going to put in. Therefore, I need more than just the error text/string.

Edit 2: Can't log errors to the database because for all I know the database may not be there. Need something that is pretty much guaranteed to run. Also, the websites are not all on 1 server and I often don't have access to cron on the server (stupid hosting companies).

0

4 Respostas

Uma abordagem poderia ser o gerenciamento de exceções apropriado em seu aplicativo, ou seja, ter controle sobre quais erros são registrados.

Cada exceção gerada registraria os detalhes do erro em um banco de dados.

Então, você poderia codificar um pequeno aplicativo para pesquisar o banco de dados de erros, talvez apenas um para todos os seus sites.

Dessa forma, você evita grandes arquivos de log ilegíveis, porque tudo é indexado e pesquisado rapidamente. Quando seu banco de dados fica muito grande, você pode truncar suas tabelas de log por meio de tarefas agendadas.

0
adicionado

Em vez de definir um manipulador de erro personalizado, deixo os erros irem para o log de erros como de costume. Eu configurei um cron que roda periodicamente e monitora as mudanças no log de erros - se ele mudasse, ele me envia um e-mail apenas com as alterações. Você pode melhorar este processo e analisar as alterações para melhor atender às suas necessidades - por exemplo, enviar apenas erros acima de um certo nível (como E_WARNING e acima).

0
adicionado

O Anacron, um cron job que envia emails para o log de erros * e um arquivo de log de erros, deve ser suficiente. O cron job pode fazer todo o processamento necessário antes de enviar o email.

0
adicionado

Uma coisa que eu usei no passado é epylog , é um aplicativo de monitoramento de logs muito flexível escrito em python. Você pode configurá-lo para monitorar seus logs de erros e incluir os erros (ou partes deles) em um resumo de log enviado por e-mail para você.

Eu gostaria de armazenar os dados de erro mais detalhados em um arquivo simples no servidor e enviar um e-mail para que você verifique o log. Um cron job que observe o diretório de erros ou arquivos para alterações e tenha um conjunto de limite de taxa seria uma boa maneira de minimizar o impacto no aplicativo em execução.

0
adicionado
PHP Brasil
PHP Brasil
3 048 dos participantes

Neste grupo pregamos o respeito ao próximo e não são permitidas ações que sejam contrárias à isso. Conduta: https://bit.ly/2CImbaA Off-topic: https://bit.ly/2x64Dzf Blog: https://brasil-php.github.io/blog Use /rules para ver detalhes das regras

PHP Brasil Off
PHP Brasil Off
167 dos participantes

Regras: não há regras