2017-06-15 8 views
-1

Je souhaite stocker des traces du code python qui est exécuté pour gérer les requêtes http.Stocker des traces de requêtes http en Python

Nous utilisons Python et Django.

Qu'est-ce qu'une trace dans ce contexte?

Je veux avoir ce pour toutes les requêtes http tracés:

  • request.META,
  • request.POST
  • request.GET

Pour chaque trace il y a des moments N les stacktraces de l'exécution du code. Dans la première étape, il serait suffisant de stocker python traceback bien connu sous forme de chaîne. Dans la première étape, la valeur des variables n'a pas besoin d'être stockée.

Les empilements peuvent être créés par un thread superviseur ou par explicite par un appel de méthode dans le code source. Dans la première étape explicite est suffisant, le thread superviseur peut être fait plus tard.

Les traces sont facultatives et uniquement pour le débogage et l'analyse. Ils ne sont pas nécessaires pour traiter les demandes http.

Comment cela peut-il être résolu?

Quelque chose manque pour comprendre cette question? Si oui, s'il vous plaît laissez un commentaire.

Mise à jour

  • Qu'est-ce que je veux atteindre? Je veux avoir un bien meilleur moyen de déboguer les erreurs dans les systèmes de production. Je veux voir ce qui s'est passé avant qu'une erreur ne se produise.
  • Toutes les demandes http? Je pense que je veux stocker environ une trace par minute. Je suppose que je vais supprimer les données après N semaines.
+0

Que voulez-vous réaliser? Voulez-vous obtenir un journal de toutes les méthodes appelées comme une demande HTTP est traitée? –

+0

@AaronDigulla je vous remercie pour vos commentaires. J'ai mis à jour la question. Tout est clair maintenant? Si non, s'il vous plaît laissez un deuxième commentaire. – guettli

+3

Vous pouvez consulter https://github.com/getsentry/sentry qui est une solution dédiée pour les erreurs de connexion. Aussi, il a un moyen de journaliser les données manuellement avec le client «Raven» –

Répondre

1

Moved de commentaire

Vous pouvez regarder dans https://github.com/getsentry/sentry qui est une solution dédiée pour les erreurs d'exploitation forestière. Aussi, il a un moyen de journaliser manuellement les données avec le client Raven.

+0

J'espère que la police StackOverflow ne nous attrape pas .... Ma question a fini par être une question pour une recommandation de logiciel .... gardez votre calme, et ne perdez pas votre humour :-) – guettli

+1

@guettli Merci. J'espère aussi! –

2

Il existe deux approches pour faire ce que vous voulez. L'un est appelé "traçage", l'autre "enregistrement".

Tracing signifie que vous avez un logiciel (comme le trace module) qui vous permet de créer des statistiques quelles méthodes sont appelées à quelle fréquence, quels sont les paramètres de la méthode sont, qui appelle qui, etc.

Avec le traçage, vous devez configurer les appels de méthode/fonction à suivre. Il est rapide à mettre en place mais ne peut pas regarder à l'intérieur des méthodes/fonctions. C'est un peu bête.

De plus, vous devrez écrire vos propres outils pour analyser les fichiers de trace afin de les interpréter.

La journalisation est plus manuelle. Vous devez configurer un cadre de journalisation, puis appeler les méthodes de journalisation dans des endroits intéressants. Cela vous permet de voir les variables locales. Vous pouvez formater les structures de données logiques de manière utile, etc.

Cela signifie que la journalisation est plus puissante mais nécessite beaucoup plus de travail manuel. Il faudra aussi du temps pour apprendre à faire une journalisation correcte (pas trop et beaucoup trop peu). Mais la journalisation vient déjà avec de nombreux outils puissants (visionneuses de journaux, rotation du fichier journal pour éviter le disque plein).

+0

merci d'expliquer cela. J'aime cette introduction de haut niveau. Je voudrais réinventer des solutions dans ce domaine. Suis-je le premier à vouloir suivre comment mon application django gère la requête http? – guettli

2

Vous pouvez utiliser un intergiciel pour interférer toutes les demandes, puis les enregistrer. Jetez un oeil à Rhumbix/django-request-logging pour un exemple de mise en œuvre.