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.
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.
Beispielverwendung:
%Vor%Ausgabe:
%Vor%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%Tags und Links python logging python-3.x