Seite 1 von 1
Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 17:13
von wonk
Hallo - Python dummy!
Ich habe ein Python-Prog mit diversen print-Ausgaben zur Kontrolle.
Fertig gestellt läuft dieses Programm als service. Dann sehe ich aber leider die Ausgaben nicht mehr (bzw. mit systemctl status mnur wenige Zeilen).
Gibt es eine Möglichkeit, durch EINE Zeile am Anfang des Programms ALLE Printausgaben in eine logdatei zu leiten OHNE das ich jede print-Ausgabe ändern muss? (etwas mit stdout = ???)
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 19:32
von sparrow
1. Möglichkeit: Vernünftiges Logging ins Programm einbauen. Braucht mehr als eine Zeile.
2. Möglichkeit: Die systemd serviceunit so konfigurieren, dass stdout geloggt wird.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 19:53
von wonk
zu 1.: Habe ich jetzt auch erkannt, ist aber nachher aufwendig.
zu 2.: Ich nehme an, das funktioniert über Linux. Ich versuche mal so was wie
StandardOutput=append:/var/log/ausgabe.log einzubauen.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 20:04
von wonk
Klapp leider nicht, evtl. da systemd Version 232 ist.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 20:23
von __blackjack__
@wonk: Natürlich geht das, es wäre nicht mal unwahrscheinlich das Du gar nichts machen musst weil das schon passiert wenn Du die letzten paar Ausgaben schon über die Systemwerkzeuge bekommst.
Ansonsten kann man eigentlich immer ausserhalb des Programms die Standausgabe und die Standardfehlerausgabe irgendwohin umleiten.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 20:37
von wonk
Hallo,
ist schön, wenn es geht. Aber einem Dummy müßtest Du schon sagen Wie. Ich habe die Ausgaben meines *.py immerhin im syslog gefunden.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Freitag 3. Mai 2024, 22:08
von snafu
Sonst nimm doch notfalls einfach
redirect_stdout() und übergib dort dein Logfile.
Lässt allerdings nichts Gutes ahnen, wenn du an der Stelle schon dein Tool nicht im Griff hast...
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 00:06
von __blackjack__
@wonk: Das ist letztlich keine Python-Frage sondern wie das Programm gestartet wird.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 11:21
von noisefloor
Hallo,
wenn ein Python-Skript als Service via systemd gestartet wird geht doch AFAIK alles, was nach stdout geht (inkl. standardmäßig, was du unter Python mit `print()` machst) ins Journal von systemd Um alle Ausgaben zu sehen musst du halt das Journal via `journalctl` abfragen und gezielt nach deiner Unit filtern.
Richtiges Logging in eine Datei deiner Wahl geht über das Python-Modul `logging`. Bei Standardlogging ist das auch mit wenigen Zeilen Code konfiguriert.
Gruß, noisefloor
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 11:38
von __blackjack__
Alternativ gäbe es externe Module für's Logging wie `loguru` oder `structlog`, je nachdem was für Anforderungen man an so ein Protokoll hat.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 16:01
von wonk
Hallo!
Ergebnis meiner Versuche:
- Standard-Output=append: /home/pi/sperre.log in *.service wird im syslog als Fehler zurückgewiesen
- im syslog finden sich auch so Ausgaben meines Python-Progs, aber nur sporadisch, nicht alle, nicht immer
- journalctl -o verbose _PID=<PID meines prozesses> ergibt "no entries"
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 17:46
von __blackjack__
@wonk: Was heisst „wird im syslog als Fehler zurückgewiesen“ konkret? Auch wenn man das korrekt schreibt, ohne Zeichen die da nicht hingehören? Hat systemd die entsprechenden Rechte die Datei zu schreiben?
Der dritte Punkt ohne die kaputte Umleitung? Und wenn man da explizit angibt, das die Ausgabe ins Journal soll?
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 19:40
von wonk
Hallo,
im syslog finde ich:
Failed to parse output specifier, ignoring append.....
Die log-Datei habe ich angelegt und Lese/Scheibrechte für alle gegeben.
Ich habe jetzt mit journalctl _SYSTEMD_UNIT=... jede Menge Ausgaben gefunden, die reichen aber nicht mehr für das laufende Prg. Wo kann ich die Datei sehen, aus der diese Ausgaben sind?
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Samstag 4. Mai 2024, 19:49
von noisefloor
Hallo,
welche Distro nutzt du? Bei den meisten Distro ist journald von systemd für's Logging zuständig und auf syslog wird "nur noch" je nach Konfiguration weitergeleitet (oder eben nicht).
Das gut systemd ist, dass es sehr umfangreich dokumentiert ist, inkl.
journalctl.
Um die Logs von einer Unit gezielt abzufragen rufst du `journalctl -u NAME_DEINER_UNIT` auf. `NAME_DEINER_UNIT` ist der Dateiname deiner Unitdatei. Mit den Optionen `--since` und `--until` und `--boot` kannst du den Zeitraum einschränken.
Gruß, noisefloor
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Sonntag 5. Mai 2024, 09:02
von wonk
Hallo,
es ist ein Spezialimage (volkszähler auf Basis von Debian wohl).
Heute morgen kamen auf einmal die vermissten Daten mit journalctl. Offensichtlich werden die Daten in - wohin auch immer - nicht kontinuierlich geschrieben, sondern kommen einmal am Tag für den ganzen Vortag. Ist das normal? In journald.conf finde ich nur auskommentierte Einträge
Gruß, wonk
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Sonntag 5. Mai 2024, 09:38
von noisefloor
Hallo,
Offensichtlich werden die Daten in - wohin auch immer - nicht kontinuierlich geschrieben, sondern kommen einmal am Tag für den ganzen Vortag. Ist das normal?
Nein, ist es nicht. Ich wüßte auch nicht, dass man journald so konfigurieren kann. Man kann das Logging in Journal so einstellen, dass es temporär ist (=nur im RAM / Temp-Speicher lebt = bei Neustart des Rechners weg) oder persistent mit einer begrenzten Größe des Journals in Tagen oder Größe oder gar kein Logging.
Entweder machst du einen Fehler bei der Abfrage oder deine (zumindest mir nicht bekannte) Distro ist extrem komisch. Jedenfalls ist das Problem von Python und die solltest das Problem im Supportforum deines Vertrauens der von dir verwendeten Distro weiter verfolgen. Oder wie vorgeschlagen richtiges Logging via Python mit einem passenden Python-Modul einsetzen.
Gruß, noisefloor
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Sonntag 5. Mai 2024, 21:10
von wonk
Danke!
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Montag 6. Mai 2024, 11:20
von Kebap
Also in der Zeit hättest du locker "print" durch logging ersetzen können, und noch was für die Zukunft gelernt.
Re: Print-Ausgaben in Datei OHNE Programmänderung?
Verfasst: Montag 6. Mai 2024, 14:28
von __blackjack__
Naja, ich würde auch bei `logging` (oder `loguru`) trotzdem einfach nach stdout loggen und den Rest über systemd machen. Dafür ist das ja da.