Logging in Sub-Modulen

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
Spark
User
Beiträge: 7
Registriert: Dienstag 25. Juli 2006, 11:17

Samstag 14. Juni 2008, 17:31

Hallo zusammen,
ich versuche logging instanzen global zu beeinflussen, was mir aber nicht richtig gelingen will. Folgendes Beispiel ist in pep-0282 enthalten:

MyModule.py

Code: Alles auswählen

import logging
log = logging.getLogger("MyModule")
def doIt():
    log.info("doin' stuff")
    #do stuff...but suppose an error occurs?
    raise TypeError, "bogus type error for testing"
MyApp.py

Code: Alles auswählen

import mymodule, logging

logging.basicConfig()

log = logging.getLogger("MyApp")
log.setLevel(logging.DEBUG) #set verbosity to show all messages of severity >= DEBUG
log.info("Starting my app")
try:
    mymodule.doIt()
except Exception, e:
    log.exception("There was a problem.")
log.info("Ending my app")
In der Konsolenausgabe sollte auch der log Eintrag aus mymodule (Zeile5) vorkommen, was er aber nicht tut:

INFO:MyApp:Starting my app
ERROR:MyApp:There was a problem.
Traceback (most recent call last):
File "C:\Programme\Python25\myApp.py", line 9, in <module>
mymodule.doIt()
File "C:\Programme\Python25\mymodule.py", line 7, in doIt
raise TypeError, "bogus type error for testing"
TypeError: bogus type error for testing
INFO:MyApp:Ending my app

Dieses Verhalten beobachte ich bei mir in Python 2.3 als auch in 2.5.
Hat jemand von Euch eine Idee, was bei diesem Beispiel falsch gelaufen ist?
Spark
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Samstag 14. Juni 2008, 17:44

Was passiert, wenn

Code: Alles auswählen

log.info("doin' stuff")
zu

Code: Alles auswählen

logging.info("doin' stuff")
wird? (ggf. auch mal .flush() probieren)

Gruß,
Christian
Spark
User
Beiträge: 7
Registriert: Dienstag 25. Juli 2006, 11:17

Samstag 14. Juni 2008, 17:53

Die Ausgabe ist dieselbe vie vorhin. Allerdings möchte ich gerne weiterhin auf einen separaten logger zugreiffen um auch das jeweils beteiligte Modul in einem Eintrag anzeigen zu können...
Spark
User
Beiträge: 7
Registriert: Dienstag 25. Juli 2006, 11:17

Montag 16. Juni 2008, 08:05

Das Beispiel ist in pep-0282 nicht über alle Zweifel erhaben. Eine Erweiterung des Namens ins notwendig, damit sich der Logger im selben Ast befindet wie das darunterliegende Modul.

MyModule.py

Code: Alles auswählen

import logging
log = logging.getLogger("MyApp.MyModule")
def doIt():
    log.info("doin' stuff")
    #do stuff...but suppose an error occurs?
    raise TypeError, "bogus type error for testing"

In einem komplexeren Projekt müssen also die Loggernamen in den Modulen angepasst werden, sofern man auf spezifischen Ästen loggen möchte.
Antworten