was ist die richtige Art und Weise zu tun, die Protokollierung in csv-Datei?
ich wollen, melden Sie einige Informationen über jede einzelne Anfrage zu senden, um einen anstrengenden http-server in einer formatierten form,verwenden Sie log-Modul zu schaffen wäre etwas, was ich nicht will:
[I 131104 15:31:29 Sys:34]
ich denke, csv-format, aber ich weiß nicht wie ich es anpassen,und python bekam csv-Modul,aber Lesen Sie das Handbuch
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(someiterable)
da würde es öffnen und schließen einer Datei jedes mal, ich fürchte, auf diese Weise verlangsamen würde, die ganze server-performance, was kann ich tun?
- Sollten Sie eine Anmeldung.Formatter-Instanz mit einem format, das csv-Ausgänge Linien.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur die Verwendung von python ist
logging
Modul.Können Sie die Ausgabe so, wie Sie wollen; werfen Sie einen Blick auf Ändern Sie das format der angezeigten Nachrichten:
und Formatierer:
Finden Sie eine Liste der attribtus Sie hier nutzen haben können: LogRecord Attribute.
Wenn Sie möchten, erzeugen Sie ein gültige csv-Datei, die python verwenden ist
csv
- Modul auch.Hier ein einfaches Beispiel:
Ausgabe:
Ich würde Zustimmen, dass Sie sollten verwenden Sie das logging-Modul, aber Sie können nicht richtig tun Sie es richtig mit nur ein format-string wie einige der anderen Antworten zeigen, wie Sie tun, nicht die situation wo Sie sich einloggen und eine Nachricht, die ein Komma enthält.
Wenn Sie brauchen eine Lösung, die richtig escape-Sonderzeichen in der Nachricht (oder andere Felder, nehme ich an), Sie hätte so schreiben Sie einen benutzerdefinierten Formatierer, und legen Sie es.
Erhalten Sie natürlich zum implementieren der MyCsvFormatter Klasse, die Erben sollen sich anmelden.Formatter und überschreiben Sie die Methode format ()
Hinweis: ich habe etwas getan, wie dies vor, aber noch nicht getestet, insbesondere Codebeispiel
So weit zu tun, als die eigentliche Flucht der Nachricht, hier ist ein möglicher Ansatz:
Python - schreiben von Daten in das csv-format als string (nicht Datei)
Als Faultier schon sagt, können Sie ganz einfach Bearbeiten Sie die Trennzeichen, die das Protokoll ein Komma, wodurch eine CSV-Datei.
Beispiel:
asctime
? Was ist, wenn die Nachricht selbst enthält ein Komma oder einen Zeilenumbruch? Die CSV-Datei ist dann kaputt. Alles schreiben von CSV-Daten sollten dabei durch einecsv.writer
Beispiel, wie gezeigt in einigen der anderen Antworten.Glaube ich nicht, dass ist die beste Idee, aber es ist machbar und ganz einfach.
Manuell Puffer deinem log. Speichern Sie die log-Einträge in einen Ort, und schreibt Sie in die Datei von Zeit zu Zeit.
Wenn Sie wissen, dass Ihr server ständig damit beschäftigt, Spülen Sie den Puffer, wenn es erreicht eine Größe. Wenn kann es große Lücken in der Nutzung, würde ich sagen, dass new thread (oder besser Prozess, prüfen Sie selbst, warum threads saugen und verlangsamen apps) mit endlos (theoretisch natürlich), loop-Schlaf/flush wäre besser rufen Sie.
Denken Sie auch daran, eine Art Haken, der flush buffer beim server unterbrochen wird oder fehlschlägt (vielleicht Signale? oder einfach nur versuchen,/außer auf der main-Funktion - es gibt noch mehr Möglichkeiten, es zu tun), so dass Sie nicht verlieren unflushed Daten-Puffer auf das unerwartete beenden.
Ich wiederhole - dies ist nicht die beste Idee, es ist das erste, was mir in den Sinn kam. Sie können konsultieren möchten logging-Implementierungen von Kolben oder eine andere webapp-framework (ANMUTIGEN Flasche hat CSV-Protokollierung zu).