Portanto, ao jogar com o desenvolvimento, posso simplesmente definir settings.DEBUG
como True
e se ocorrer um erro, posso vê-lo bem formatado, com bom rastreamento de pilha e informações de solicitação.
Mas, no tipo de site de produção, prefiro usar DEBUG=False
e mostrar aos visitantes uma página de erro 500 padrão com informações nas quais estou trabalhando para corrigir esse bug no momento;)
Ao mesmo tempo, gostaria de ter alguma maneira de registrar tudo essas informações (rastreamento de pilha e informações de solicitação) em um arquivo no meu servidor - para que eu possa simplesmente enviá-las para o console e observar os erros rolarem, enviar o log para mim a cada hora ou algo assim.
Quais soluções de registro você recomendaria para um site django que atendesse a esses requisitos simples? Eu tenho o aplicativo rodando como fcgi
servidor e estou usando o servidor web apache como front-end (embora pensando em ir para o lighttpd).
fonte
Respostas:
Bem, quando
DEBUG = False
, o Django enviará automaticamente um rastreamento completo de qualquer erro para cada pessoa listada naADMINS
configuração, o que recebe notificações praticamente de graça. Se desejar um controle mais refinado, você pode escrever e adicionar às suas configurações uma classe de middleware que defina um método chamadoprocess_exception()
, que terá acesso à exceção que foi gerada:http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception
Seu
process_exception()
método pode executar o tipo de registro que você deseja: gravar no console, gravar em um arquivo etc., etc.Editar: embora seja um pouco menos útil, você também pode ouvir o
got_request_exception
sinal, que será enviado sempre que uma exceção for encontrada durante o processamento da solicitação:http://docs.djangoproject.com/en/dev/ref/signals/#got-request-exception
No entanto, como você não acessa o objeto de exceção, é muito mais fácil trabalhar com o método middleware.
fonte
logging.exception('Some message')
com o módulo de log padrão do python funciona bem em um manipulador sginalgot_request_exception
, se tudo o que você deseja fazer é desconectar rastreamentos de pilha. Em outras palavras, o rastreamento ainda está disponível emgot_request_exception
.O Django Sentry é um bom caminho a percorrer, como já mencionado, mas há um pouco de trabalho envolvido na configuração adequada (como um site separado). Se você quiser apenas registrar tudo em um arquivo de texto simples, aqui está a configuração de log para colocar em seu
settings.py
fonte
'include_html': True
simplesmente não torna os e-mails "mais agradáveis"! Ele inclui um rastreamento completo, incluindo os valores das configurações e variáveis locais. De acordo com os documentos, esta é uma preocupação de segurança: docs.djangoproject.com/en/1.8/topics/logging/…django-db-log, mencionado em outra resposta, foi substituído por:
https://github.com/dcramer/django-sentry
fonte
Obviamente, James está correto, mas se você deseja registrar exceções em um armazenamento de dados, já existem algumas soluções de código aberto disponíveis:
1) O CrashLog é uma boa opção: http://code.google.com/p/django-crashlog/
2) O Db-Log também é uma boa opção: http://code.google.com/p/django-db-log/
Qual é a diferença entre os dois? Quase nada que eu possa ver, então qualquer um será suficiente.
Eu usei os dois e eles funcionam bem.
fonte
Algum tempo se passou desde o envio do código mais útil do EMP. Acabei de implementá-lo e, enquanto estou pesquisando com alguma opção manage.py, para tentar encontrar um bug, recebi um aviso de reprovação no sentido de que, com a minha versão atual do Django (1.5.?), Um filtro require_debug_false está agora necessário para o manipulador mail_admins.
Aqui está o código revisado:
fonte
Eu apenas tive um problema irritante com o meu
fcgi
script. Isso ocorreu antes do django começar. A falta de registro é muito dolorosa. Enfim, redirecionar o stderr para um arquivo como a primeira coisa ajudou muito:fonte