Hallo,
aktuell beschäftigt mich das Problem, dass auftretende Fehler in Python Skripte doppelt geloggt werden mit systemd.
Skript (verkürzte darstellung, deshalb Zeilennr. später unstimmig):
Fehler natürlich bewusst herbeigeführt
def main():
a = 1 + "a"
if __name__ == "__main__":
try:
main()
finally:
LOGGER.exeption("Schwerwiegender Fehler aufgetreten")
LOGGER ist eine Instanz von dem Modul from systemd import journal
def __setup_logging(loglevel, frm, startmethode, unitname, pfad):
"""
Erstellt die Logger Instanz für das Skript
"""
logger = logging.getLogger()
logger.setLevel(loglevel)
logger.handlers = []
if startmethode == "auto":
log_handler = journal.JournalHandler(SYSLOG_IDENTIFIER=unitname)
else:
fehlerlog = os.path.join(pfad, "{}.log".format(unitname))
log_handler = logging.FileHandler(fehlerlog)
log_handler.setLevel(loglevel)
log_handler.setFormatter(frm)
logger.addHandler(log_handler)
return logger
Alles anzeigen
Mein Problem:
Sep 11 10:19:04 werkstattpi python3[7577]: TypeError: unsupported operand type(s) for +: 'int' and 'str'
Sep 11 10:19:04 werkstattpi python3[7577]: char_erstellen = sonderzeichen.Sonderzeichen(display.lcd)
Sep 11 10:19:04 werkstattpi python3[7577]: File "/home/pi/Kaffee/picoffee.py", line 1077, in main
Sep 11 10:19:04 werkstattpi python3[7577]: LOGGER.exception("Schwerwiegender Fehler aufgetreten")
Sep 11 10:19:04 werkstattpi python3[7577]: File "/home/pi/Kaffee/picoffee.py", line 1120, in <module>
Sep 11 10:19:04 werkstattpi python3[7577]: Traceback (most recent call last):
Sep 11 10:19:04 werkstattpi picoffee[7577]: ERROR: Schwerwiegender Fehler aufgetreten
Traceback (most recent call last):
File "/home/pi/Kaffee/picoffee.py", line 1120, in <module>
LOGGER.exception("Schwerwiegender Fehler aufgetreten")
File "/home/pi/Kaffee/picoffee.py", line 1077, in main
char_erstellen = sonderzeichen.Sonderzeichen(display.lcd)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Alles anzeigen
Das in rot ist auch im Terminal wirklich rot, und die gewollte Ausgabe durch das Skript. Es hat den anschein, dass aber auch der Python Interpreter selbst nochmals die Fehlermeldungen an systemd weiterleitet. (Die Codeformatierung hatte was gegen meine Farbe, rot ist der Teil nach picoffee[7577]:
bis Ende des Codeblockes
Entweder, wie bringe ich dem Pythoninterpreter bei dass er die Fehlermeldungen nicht weiterreichen soll? Eventuell eine Ausgabeumleitung, aber ob die in einer System Unit funktioniert hab ich noch nicht getest und würde ich auch nicht "schön" finden
oder aber, kann ich systemd es lernen die doppelte Ausgabe zu ignorieren?