LOG Datei während dem Durchlauf befüllen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mueller.D
User
Beiträge: 33
Registriert: Freitag 13. Januar 2017, 10:04

Hallo,
im Moment erstellt mein Python Programm die LOG Datei und befült diese mit Werte, allerdings erst nach Beenden der Anwendung. Ist es möglich, dass dies schon während dessen geschieht?
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Das musst du doch für dein Programm am besten wissen ob es machbar ist oder nicht.
Wir kennen den Quellcode nicht, wir wissen nicht wie du die Werte ermittelst.
Können die Werte überhaupt währenddessen ermittelt werden?
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

Hast Du das Modul logging importiert?

Code: Alles auswählen

import logging
In meiner main()-Funktion steht dann im Prinzip immer folgender Absatz:

Code: Alles auswählen

def main():
    # LOGGING -----------------------------------------------
    filename = "C:/.../logs/DATEINAME {}.log".format(datetime.date.today())
    handler = logging.FileHandler(filename, "a")
    frm = logging.Formatter("%(asctime)s [%(levelname)-8s] [%(funcName)-20s] [%(lineno)-4s] %(message)s", "%d.%m.%Y %H:%M:%S") 
    handler.setFormatter(frm)
    logger = logging.getLogger() 
    logger.addHandler(handler)

    logger.setLevel(logging.DEBUG)
    # LOGGING -----------------------------------------------
Du kannst logger.setLevel(logging.DEBUG) auch hochsetzen, so dass nur Meldungen ab einem bestimmten Level angezeigt bzw. geloggt werden. Die Rangfolge erkennst Du aus der nächsten Codebox, DEBUG ist die niedrigste Stufe. Du nutzt das z. B., um den Inhalt von Variablen zu loggen. Mittels Info setze ich z. B. Zwischeninfos ab, z. B. welcher Abschnitt jetzt folgt oder welcher Typ (Klassifizierung) von etwas erkannt wurde.

In der main-Funktion kannst Du dann folgende Meldungen in die Logdatei schreiben lassen:

Code: Alles auswählen

logger.debug("Debug-Meldung")
logger.info("Info-Meldung")
logger.warning("Warnung")
logger.error("Fehler-Meldung")
logger.ciritical("Kritische Fehler-Meldung")
In den anderen Funktionen, Klassen usw. schreibst du stattdessen:

Code: Alles auswählen

logging.debug("Debug-Meldung")
logging.info("Info-Meldung")
logging.warning("Warnung")
logging.error("Fehler-Meldung")
logging.ciritical("Kritische Fehler-Meldung")
In Deiner Logdatei landen auch alle anderen Logging-Meldungen, die ein importiertes Modul z. B. absetzt. Auf Wunsch kannst Du die Logging-Meldungen auch in der Konsole ausgeben lassen, nutze ich aber nie. Ferner gibt es noch logging.exception(), womit du eine geworfene Exception in die Logdatei schreiben kannst, was ich sehr praktisch finde.

Ich fand es praktisch einzelne Log-Meldungen mit einem \n zu beenden, so dass die Logdatei strukturierter erscheint.

Du findest alle Infos ausführlicher hier: https://docs.python.org/3.4/library/logging.html
Mueller.D
User
Beiträge: 33
Registriert: Freitag 13. Januar 2017, 10:04

Danke für deine Lösung, Perfekt!
Antworten