Comment forcer Celery à utiliser un middleware personnalisé afin d'ajouter des informations de débogage supplémentaires et de contrôler le compte email utilisé pour envoyer des emails d'erreur? J'utilise un Django personnalisé middleware pour ajouter des informations de débogage supplémentaires à exceptions et envoyer des e-mails d'erreur. Cela fonctionne parfaitement pour les erreurs standard de Django 500, mais Celery semble ignorer tout le middleware de Django. L'effet est que les erreurs qui se produisent dans Celery ne signalent qu'une traceback très limitée et utilisent la connexion par e-mail par défaut, pas une connexion spéciale utilisée pour signaler des erreurs.Faire Celery utiliser le middleware Django
Répondre
Vous devez ajouter mail_admins
gestionnaire à l'enregistreur de céleri, comme ceci:
LOGGING = {
...
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'celery': {
'level': 'INFO',
'handlers': ['mail_admins'],
'propagate': True (or False :)),
},
...
BTW, j'utilise Sentry pour les erreurs de consignation (à la fois Django et Céleri) et il est sacrément bon!
Cela ne fonctionne tout simplement pas. Je pense que ce que l'affiche originale recherchait était une notification par email sur les erreurs. Pas simplement des retraçages. – rh0dium
Céleri n'a pas vraiment d'utilité pour le middleware django, mais cela va accomplir ce que je pense que vous voulez.
Quelque part dans votre lieu de code du gestionnaire de signaux suivant:
from celery.signals import task_failure
from django.core.mail import mail_admins
from django.views.debug import ExceptionReporter
@task_failure.connect
def task_failure_handler(task_id, exception, traceback, einfo, *args, **kwargs):
exc_info = (einfo.type, exception, traceback)
reporter = ExceptionReporter(None, *exc_info)
debug_html = reporter.get_traceback_html()
debug_text = reporter.get_traceback_text()
subject = u'Exception - %s' % exception.message
subject = subject.replace("\n", " ")[:250]
mail_admins(subject, debug_text, html_message=debug_html)
Dans settings.py
ajouter ce qui suit
# disable default celery error emails
CELERY_SEND_TASK_ERROR_EMAILS = False
- 1. Django Celery erreur d'installation
- 2. Django Celery Erreur
- 3. Celery django explication
- 4. django - question middleware
- 5. Django Celery Workflow Pause/Resume
- 6. Celery (Django) Limitation de débit
- 7. Django Middleware + URL
- 8. Django Middleware Connexion requise
- 9. Le thread Django middleware est-il sécurisé?
- 10. Modifier l'adresse dans le middleware Django
- 11. Django middleware et HttpRequest changement
- 12. comment installer le middleware personnalisé dans django
- 13. Comment profiler le middleware de Django?
- 14. middleware django rediriger boucle infinie
- 15. django-tri et django-Pagination: middleware pour
- 16. Comment utiliser le middleware rack avec Rails3?
- 17. Django comme middleware pour Zope
- 18. Django middleware process_template_response pas triggerd
- 19. Inverser les urls dans Django/Celery
- 20. Django Celery a battu au démarrage
- 21. django et deliverance en middleware
- 22. Interaction avec Django/Celery depuis Java
- 23. Exécution de Django-Celery en production
- 24. Comment utiliser le middleware imbriqué dans express.js
- 25. celery-django ne trouve pas les paramètres
- 26. accéder au modèle de middleware - django
- 27. middleware cProfiler Django: trier les stats
- 28. Liste par défaut du middleware intégré Django
- 29. Processeurs de contexte Django et middleware
- 30. Réessayer des tâches perdues ou échouées (Celery, Django et RabbitMQ)
Pouvez-vous inclure le contenu de '' MIDDLEWARE_CLASSES' de votre settings.py' dans la OP? – Aya