Reporte de erros via e-mail

Quando você está rodando um site público deve sempre desligar a configuração DEBUG. Isso irá fazer seu servidor operar muito mais rápido, e também evitará que usuários maliciosos vejam detalhes de sua aplicação que não devem ser revelados pelas páginas de erro.

Entretanto, rodar com o DEBUG como False significa que você nunca verá os erros gerados pelo seu site – todo mundo sempre verá somente a sua página de erros pública.

Erros de servidor

Quando DEBUG é False, o Django irá enviar um email para os usuários listados em ADMIN sempre que seu código lançar uma exceção não tratada e que resulta num “internal server error” (código de status HTTP 500). Isto dá aos administradores a notificação imediata de quaisquer erros. O ADMINS irá pegar uma descrição do erro, um traceback completo do Python, e detalhes sobre a requisição HTTP que causou o erro.

Por padrão, o Django irá mandar e-mails de root@localhost. Porém, alguns provedores de e-mail rejeitam todos os e-mails desse endereço. Para usar um endereço de remetente diferente, modifique a configuração SERVER_EMAIL.

Para desabilitar este comportamento, basta remover todas as entradas da configuração ADMINS.

Erros 404

O Django também pode ser configurado para enviar e-mail com erros de links quebrados (erros 404 “page not found”). O Django envia um email sobre os erros quando:

Se essas condições forem satisfeitas, o Django irá enviar um e-email para os usuários listados em MANAGERS toda vez que seu código gerar um erro 404 e a requisição tiver um referente. (Ela não se preocupa em enviar e-mail de erros 404 que não têm um referente – normalmente esses são tentativas dos usuários de escrever URLs ou algum bot web quebrado).

Você pode dizer ao Django parar de reportar alguns erros 404 específicos apromirando as configurações IGNORABLE_404_ENDS e IGNORABLE_404_STARTS. Ambos devem ser uma tupla de strings. Por exemplo:

IGNORABLE_404_ENDS = ('.php', '.cgi')
IGNORABLE_404_STARTS = ('/phpmyadmin/',)

Neste exemplo, um error 404 para qualquer final de URL com .php ou .cgi não será reportado. Nem mesmo qualquer URL que comece com /phpmyadmin/.

O melhor caminho para desabilitar este comportamento é setar o SEND_BROKEN_LINK_EMAILS para False.

See also

Você pode também configurar um reporte de erro customizado, personalizando uma parte do exception middleware. Se você escrever um manipulador de erro personalizado, será uma boa idéia emular o manipulador de erros nativo do Django e somente reportar/logar erros se o DEBUG for False.