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
éFalse
SEND_BROKEN_LINK_EMAILS
éTrue
- Seu
MIDDLEWARE_CLASSES
incluí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
.