2017-06-15 2 views
-1

Ich möchte Spuren des Python-Codes speichern, der ausgeführt wird, um http-Anfragen zu behandeln.Speichern von Spuren von HTTP-Anfragen in Python

Wir verwenden Python und Django.

Was ist eine Spur in diesem Zusammenhang?

Ich möchte dies für alle verfolgt HTTP-Anfragen haben:

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

Für jede Spur gibt es N-mal die Stacktraces der Codeausführung. Im ersten Schritt würde es ausreichen, bekannte Python-Tracebacks als String zu speichern. Im ersten Schritt muss der Wert der Variablen nicht gespeichert werden.

Die Stacktraces können von einem Supervisor-Thread oder explizit durch einen Methodenaufruf im Quellcode erstellt werden. Im ersten Schritt ist explizit genug, der Supervisor-Thread kann später ausgeführt werden.

Die Traces sind optional und nur zum Debuggen und Analysieren. Sie werden nicht benötigt, um die http-Anfragen zu bearbeiten.

Wie könnte das gelöst werden?

Fehlt etwas, um diese Frage zu verstehen? Wenn, ja, bitte hinterlasse einen Kommentar.

aktualisieren

  • Was will ich erreichen? Ich möchte eine viel bessere Möglichkeit haben, Fehler in Produktionssystemen zu debuggen. Ich möchte sehen, was passiert ist, bevor ein Fehler aufgetreten ist.
  • Alle http Anfragen? Ich denke, ich möchte ungefähr eine Spur pro Minute speichern. Ich schätze, ich werde die Daten nach N Wochen löschen.
+0

Was möchten Sie erreichen? Möchten Sie ein Protokoll aller aufgerufenen Methoden erhalten, wenn eine HTTP-Anfrage verarbeitet wird? –

+0

@AaronDigulla vielen Dank für Ihr Feedback. Ich habe die Frage aktualisiert. Alles klar jetzt? Wenn nicht, bitte hinterlassen Sie einen zweiten Kommentar. – guettli

+3

Sie könnten in https://github.com/getsentry/sentry nachsehen, das eine dedizierte Lösung für Protokollierungsfehler ist. Es hat auch eine Möglichkeit zur manuellen Protokollierung von Daten mit 'Raven' Client –

Antwort

1

von Kommentar Verschoben

Sie in https://github.com/getsentry/sentry aussehen könnten, die für das Protokollieren von Fehlern dedizierte Lösung ist. Es hat auch eine Möglichkeit, Daten mit Raven-Client manuell zu protokollieren.

+0

Ich hoffe, dass die StackOverflow-Polizei uns nicht erwischt .... Meine Frage endete als eine Frage für eine Software-Empfehlung .... bleib ruhig und verlier deinen Humor nicht :-) – guettli

+1

@guettli Danke. Das hoffe ich auch! –

2

Es gibt zwei Ansätze, um zu tun, was Sie wollen. Einer wird "Tracing" genannt, der andere "Logging".

Tracing bedeutet, dass Sie einige Software haben (wie die trace module), die Sie Statistiken erstellen können, welche Methoden aufgerufen werden, wie oft, was die Verfahrensparameter sind, die

Mit Tracing wem usw. ruft, müssen Sie Konfigurieren Sie, welche Methoden-/Funktionsaufrufe verfolgt werden sollen. Es ist schnell eingerichtet, kann aber nicht in Methoden/Funktionen hineinschauen. Es ist ein bisschen dumm.

Außerdem müssen Sie Ihre eigenen Tools schreiben, um die Trace-Dateien zu analysieren, um ihnen einen Sinn zu geben.

Protokollierung ist mehr manuell. Sie müssen ein Logging-Framework konfigurieren und dann Log-Methoden an interessanten Stellen aufrufen. Damit können Sie lokale Variablen sehen. Sie können logische Datenstrukturen auf nützliche Weise formatieren, etc.

Das bedeutet, Protokollierung ist leistungsfähiger, aber erfordert viel mehr manuelle Arbeit, um einzurichten. Es wird auch etwas Zeit brauchen, um zu lernen, wie man richtig loggt (nicht zu viel und viel zu wenig). Die Protokollierung ist jedoch bereits mit vielen leistungsstarken Tools ausgestattet (Protokoll-Viewer, Protokolldateirotation, um zu verhindern, dass die Festplatte voll ist).

+0

danke für die Erklärung. Ich mag diese Einführung auf hohem Niveau. Ich würde gerne Lösungen in diesem Bereich neu erfinden. Bin ich der Erste, der verfolgen möchte, wie meine Django-Anwendung die http-Anfrage behandelt? – guettli

2

Sie können eine Middleware verwenden, um alle Anforderungen zu beeinflussen und sie dann zu protokollieren. Sehen Sie sich Rhumbix/django-request-logging für eine Beispielimplementierung an.