Seite 1 von 1

LOG Datei während dem Durchlauf befüllen

Verfasst: Donnerstag 23. Februar 2017, 15:10
von Mueller.D
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?

Re: LOG Datei während dem Durchlauf befüllen

Verfasst: Donnerstag 23. Februar 2017, 15:41
von sebastian0202
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?

Re: LOG Datei während dem Durchlauf befüllen

Verfasst: Sonntag 26. Februar 2017, 15:19
von pixewakb
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

Re: LOG Datei während dem Durchlauf befüllen

Verfasst: Mittwoch 1. März 2017, 10:30
von Mueller.D
Danke für deine Lösung, Perfekt!