[Python-de] Loggen in unterschiedliche Dateien

rkoch83 at googlemail.com rkoch83 at googlemail.com
Do Aug 4 04:35:45 EDT 2016


Moin,

ich habe ein Skript geschrieben, dass auf einer Webplattform (XNAT) ausgeführt wird, wenn Daten hochgeladen werden.

Um eventuelle Fehler zu entdecken, will ich einige Dinge in eine Datei loggen, die aber für jeden Upload neu angelegt werden soll.

Dem "Basic Tutorial" in der Doku folgend habe ich zunächst folgendes probiert:

(Die Variablen project und experiment ändern sich bei jedem Upload und daher jeder Ausführung des Skripts.)

Version 1
=========
logging.basicConfig(
    filename="/home/xnat/xnat_data/logs/{}_{}.log".format(project, experiment), 
    level=logging.DEBUG, 
    format='%(asctime)s %(message)s')
    
logging.info("Project: {}, Experiment: {}".format(project, experiment))

logging.shutdown()
=========

Das hat beim ersten Durchlauf auch funktioniert. Die Datei wurde angelegt und korrekt hineingeloggt. Aber jeder weitere Aufruf des Scriptes loggt weiterhin *in diese Datei*. Obwohl ein neuer Dateiname generiert wird.

Später habe ich es dann mit einem neuen Logger probiert:


Version 2
=========
logging.basicConfig(
    filename="/home/xnat/xnat_data/logs/{}_{}.log".format(project, experiment), 
    level=logging.DEBUG, 
    format='%(asctime)s %(message)s',
    filemode='w')
logger = logging.getLogger(experiment)

logger.info("Project: {}, Experiment: {}".format(project, experiment))

logging.shutdown()
=========

Diesmal wird jedesmal eine neuer Logger angelegt, der jedesmal einen anderen Namen trägt, und der Parameter filemode='w' besagt, dass eigentlich jedesmal eine neue Datei erzeugt werden sollte.

Passiert aber nicht. Er loggt immer noch in die alte Datei.

Was sagt mir das?

1) Irgendwie läuft im Hintergrund die Python-Sitzung weiter (sonst würde der Dateiname nicht gespeichert bleiben).
2) Irgendwie muss ich Python mitteilen, dass ich a) in eine andere Datei loggen will und b) in die alte Datei nicht mehr speichern will.

Ich vermute, ich muss irgendwie manuell Filehandler zuweisen und ggfls. sogar entfernen(?). Aber wie?

Das Ausprobieren ist etwas beschwerlich, da ich das Skript erst auf die Webseite laden muss und dann einen Upload starten, der schließlich die Ausführung des Skripts in seiner "natürlichen Umgebung" anstößt.

Daher wäre ich für zielgerichtete Hinweise dankbar.

Laufen tut das ganze unter Python 2.7.6.

Robin

PS: Ich benutze Google Groups, da ich auf der Arbeit bin. Bitte keine Vorurteile. ;-)


Mehr Informationen über die Mailingliste python-de