Hallo,

On 7/20/07, Bastian Venthur <venthur@debian.org> wrote:
Hi Liste,

ich hab hier ein komisches Problem mit loggern. Um es zu demonstrieren
hier ein minimales Beispiel:

=== main.py ===

import logging
import module1

if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG, format="%(name)-12s
%(levelname)-8s %(message)s")
    logger = logging.getLogger()
    logger.info("Logger initialized")

    module1.foo ()

=== module1.py ===

import logging

logger = logging.getLogger("module1")
logger.debug("Logger initialized")

def foo():
    logger.debug("Entered foo()")

=== Ausgabe von python main.py ===
root         INFO     Logger initialized
module1      DEBUG    Entered foo()


Meine Frage: Warum wurde logger.debug("Logger initialized") in
module1.py nicht ausgeführt? Ein print an der Stelle würde etwas ausgeben.

Es wird ausgeführt! Allerdings zum Zeitpunkt des imports in main.py, also bevor in main.py logging.basicConfig() ausgeführt wird. Wenn ich mal raten soll, dann würde ich sagen, daß der Default-Logging-Level höher als DEBUG ist und deshalb das logging.debug("Logger initialized") in module1.py stumm bleibt. wenn Du "debug" in "error" änderst, also den Logging-Level hochsetzt, bekommst Du eine Fehlermeldung, wohl weil der Logger (noch) nicht konfiguriert ist.

Wenn Du logging.basicConfig() in main.py direkt nach den "import logging" und noch vor "import module1" setzt, dann ist auch alles konfiguriert und die Ausgabe erscheint wie erwartet.

Gruß, Heiko