Mehrzeiliges Logging
Hallo, seit Jahren verwende ich das unter Unix übliche einzeilige Logging. Also ein Aufruf von "logging.info()" wird genau zu einer Zeile im Log-File. Ich hätte gerne in Zukunft mehrzeiliges Logging. Beispiel: logging.info('foo\nbar') Wie soll 'foo\nbar' nun auf Platte gespeichert werden? Welches Format bietet sich an? Sicherlich muss ich dann meine Tools anpassen, die die Logs bisher auswerten. Aber das ist machbar. Ich bin nun unsicher ob es hier einen "sane default" gibt. Die Lösungen, die ich hier gefunden habe, die fühlen sich für mich wie eine "Bastellösung" an: https://stackoverflow.com/questions/49049044/python-setup-of-logging-allowin... Ich möchte aber keine Bastellösung. Ich würde gerne einen Weg gehen, der von tausend anderen Python-Entwicklern auch gegangen wird. Es kann doch nicht sein, dass ich der erste bin, der das will, oder? Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
Am 13.03.2018 um 14:30 schrieb Thomas Güttler:
Wie soll 'foo\nbar' nun auf Platte gespeichert werden? Welches Format bietet sich an?
Wie wäre es mit Logging im JSON-Format? Z.B. hiermit: https://github.com/madzak/python-json-logger Das schöne an der Benutzung eines solchen Custom-Formatters für das Python Standardloggingsystem ist, dass man diese über die Logging-Konfiguration ein- und ausschalten kann. Chris
On 2018-03-13 14:30, Thomas Güttler wrote:
seit Jahren verwende ich das unter Unix übliche einzeilige Logging.
Also ein Aufruf von "logging.info()" wird genau zu einer Zeile im Log-File.
Ich hätte gerne in Zukunft mehrzeiliges Logging. [...]
Wenn ich das richtig sehe, hast du das Problem der eingeschränkten "Parsebarkeit" auch schon jetzt, wenn ein Traceback mitgeloggt wird.
Ich bin nun unsicher ob es hier einen "sane default" gibt.
Die Lösungen, die ich hier gefunden habe, die fühlen sich für mich wie eine "Bastellösung" an:
https://stackoverflow.com/questions/49049044/python-setup-of-logging-allowin...
Die Antwort mit dem `NewlineFormatter` sieht für mich eigentlich ziemlich vernünftig aus.
Ich möchte aber keine Bastellösung. Ich würde gerne einen Weg gehen, der von tausend anderen Python-Entwicklern auch gegangen wird. Es kann doch nicht sein, dass ich der erste bin, der das will, oder?
Nein, du bist wahrscheinlich nicht der erste, aber die bisherige Konvention, Log-Zeilen zu speichern, ist vom Design her wohl eher ungeeignet (abgesehen von den geschilderten Workarounds). Der aktuell übliche Ansatz ist aus meiner Sicht "broken by design". Was ich recht interessant finde, wäre ein Ansatz mit JSONlines: http://jsonlines.org/ Ein Logger auf dieser Basis würde die Struktur der Log-Informationen erhalten. Viele Grüße Stefan
Hallo Liste, bis jetzt sind zwei Antworten da: zweimal wird JSON erwähnt. Danke für die Reaktion. Ja, json klingt plausibel. Zwischen den Zeilen lese ich, dass aber bisher noch keine Erfahrung ist der Praxis vorliegt. Mal ganz dumm gefragt: Wer hat damit (oder einen anderen Lösung) praktische Erfahrung und kann vielleicht mal "Aus dem Nähkästchen plaudern"? Gruß, Thomas Am 13.03.2018 um 14:30 schrieb Thomas Güttler:
Hallo,
seit Jahren verwende ich das unter Unix übliche einzeilige Logging.
Also ein Aufruf von "logging.info()" wird genau zu einer Zeile im Log-File.
Ich hätte gerne in Zukunft mehrzeiliges Logging.
Beispiel: logging.info('foo\nbar')
Wie soll 'foo\nbar' nun auf Platte gespeichert werden? Welches Format bietet sich an?
Sicherlich muss ich dann meine Tools anpassen, die die Logs bisher auswerten. Aber das ist machbar.
Ich bin nun unsicher ob es hier einen "sane default" gibt.
Die Lösungen, die ich hier gefunden habe, die fühlen sich für mich wie eine "Bastellösung" an:
https://stackoverflow.com/questions/49049044/python-setup-of-logging-allowin...
Ich möchte aber keine Bastellösung. Ich würde gerne einen Weg gehen, der von tausend anderen Python-Entwicklern auch gegangen wird. Es kann doch nicht sein, dass ich der erste bin, der das will, oder?
Gruß, Thomas
-- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
Hallo, ich hoffe es ist nicht zu off-topic oder an deinen Wünschen vorbei, aber gwenview (ein in C++ geschriebener Bildbetrachter von KDE) loggt mehrzeilig und wenn ich journald nutze, kümmert muss ich mich auch nicht extra darum kümmern. Für Linux mit journald kann man folglich einfach ``` Python from systemd import journal journal.send("Hallo\nWelt") ``` schreiben oder den JournalHandler verwenden und der Zeilenumbruch wird zwar ohne zusätzliches "INFO" o.ä. dargestellt, jedoch als ein Eintrag angesehen: ``` sh ~ journalctl -e -n1 -t python3 Mar 14 14:08:53 localhost python3[24423]: Hallo Welt ``` Leider habe ich selbst keine Erfahrung diesbezüglich. Mit freundlichen Grüßen Julian On 03/14/2018 09:56 AM, Thomas Güttler wrote:
Hallo Liste,
bis jetzt sind zwei Antworten da: zweimal wird JSON erwähnt. Danke für die Reaktion. Ja, json klingt plausibel.
Zwischen den Zeilen lese ich, dass aber bisher noch keine Erfahrung ist der Praxis vorliegt.
Mal ganz dumm gefragt: Wer hat damit (oder einen anderen Lösung) praktische Erfahrung und kann vielleicht mal "Aus dem Nähkästchen plaudern"?
Gruß, Thomas
Am 13.03.2018 um 14:30 schrieb Thomas Güttler:
Hallo,
seit Jahren verwende ich das unter Unix übliche einzeilige Logging.
Also ein Aufruf von "logging.info()" wird genau zu einer Zeile im Log-File.
Ich hätte gerne in Zukunft mehrzeiliges Logging.
Beispiel: logging.info('foo\nbar')
Wie soll 'foo\nbar' nun auf Platte gespeichert werden? Welches Format bietet sich an?
Sicherlich muss ich dann meine Tools anpassen, die die Logs bisher auswerten. Aber das ist machbar.
Ich bin nun unsicher ob es hier einen "sane default" gibt.
Die Lösungen, die ich hier gefunden habe, die fühlen sich für mich wie eine "Bastellösung" an:
https://stackoverflow.com/questions/49049044/python-setup-of-logging-allowin...
Ich möchte aber keine Bastellösung. Ich würde gerne einen Weg gehen, der von tausend anderen Python-Entwicklern auch gegangen wird. Es kann doch nicht sein, dass ich der erste bin, der das will, oder?
Gruß, Thomas
Am 14.03.2018 um 14:18 schrieb Julian:
Für Linux mit journald kann man folglich einfach
Ich würde davon abraten, für ein normales Anwendungsprogramm vorauszusetzen, dass journald/systemd installiert ist. Es gibt genügt Linux-Distributionen, die das nicht verwenden. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible |
Am 15.03.2018 um 09:20 schrieb Hartmut Goebel:
Am 14.03.2018 um 14:18 schrieb Julian:
Für Linux mit journald kann man folglich einfach
Ich würde davon abraten, für ein normales Anwendungsprogramm vorauszusetzen, dass journald/systemd installiert ist. Es gibt genügt Linux-Distributionen, die das nicht verwenden.
Ja, du hast Recht. Es gibt auch noch Produktivmaschinen auf den läuft noch ein zehn Jahre alter Körnel. Aber bei diesem konkreten Anliegen ist das zufälligerweise und glücklicherweise anders. Systemd und Journald sind hier immer vorhanden. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/ I am looking for feedback: https://github.com/guettli/programming-guidelines
participants (5)
-
Christopher Arndt
-
Hartmut Goebel
-
Julian
-
Stefan Schwarzer
-
Thomas Güttler