Python Rolling Log auf eine Variable

8

Ich habe eine Anwendung, die Multithreading verwendet und im Hintergrund auf einem Server ausgeführt wird. Um die Anwendung zu überwachen, ohne sich am Server anmelden zu müssen, habe ich beschlossen, Flasche einzubinden, um auf einige HTTP-Endpunkte zu reagieren und den Status zu melden , Remote-Herunterfahren usw. ausführen.

Ich wollte auch eine Möglichkeit hinzufügen, die Logdatei zu konsultieren. Ich könnte mit dem FileHandler anmelden und die Zieldatei senden, wenn die URL angefordert wird (z. B. /log ).

Allerdings habe ich mich gefragt, ob es möglich wäre, etwas wie RotatingFileHandler zu implementieren, aber anstatt sich in eine Datei einzuloggen, logge ich mich in eine Variable ein (z. B. BytesIO ). Auf diese Weise konnte ich das Protokoll auf die neuesten Informationen beschränken und gleichzeitig als Text anstelle eines separaten Dateidownloads an den Browser zurückgeben.

Der RotatingFileHandler benötigt einen Dateinamen, also ist es keine Option, einen BytesIO stream zu übergeben. Das Protokollieren auf eine Variable selbst ist perfekt machbar (zB Python-Log-Ausgabe in einer Variablen erfassen ) , aber ich bin ein bisschen ratlos, wie man den rollenden Teil macht.

Alle Gedanken, Hinweise, Vorschläge würden sehr geschätzt werden.

    
ƘɌỈSƬƠƑ 21.06.2016, 12:13
quelle

2 Antworten

1

Wenn wir weiter auf Andrew Guys Vorschlag eingehen, habe ich logging.Handler subclassiert und einen Handler implementiert, der collections.deque mit einer festen Länge verwendet, um die Protokollnachrichten zu protokollieren.

%Vor%

Beispielverwendung:

%Vor%

Ausgabe:

%Vor%     
ƘɌỈSƬƠƑ 22.06.2016, 12:00
quelle
6

Verwenden Sie die Technik, die in Python-Protokollausgaben in einer Variablen erfassen beschrieben wird, aber erfassen Sie sie es in einen benutzerdefinierten Stream, der alte Daten wegwirft.

Wie so:

%Vor%     
Robᵩ 21.06.2016 18:40
quelle

Tags und Links