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:
DEBUGéFalseSEND_BROKEN_LINK_EMAILSéTrue- Seu
MIDDLEWARE_CLASSESincluíCommonMiddleware(o que é feito por padrão).
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.