Ich komme von SLF4J und Log4J, also könnte das der Grund sein, warum ich nicht verstehe, wie Logging in Python funktioniert.Protokollierung und Vererbung von Loggerkonfigurationen in Python
Ich habe folgendes
---- logging.yaml
version: 1
handlers:
console:
class: logging.StreamHandler
level: DEBUG
stream: ext://sys.stderr
formatter: simpleFormatter
file:
class: logging.FileHandler
filename: app.log
mode: w
level: DEBUG
formatter: simpleFormatter
formatters:
simpleFormatter:
#class: !!python/name:logging.Formatter
#class: logging.Formatter
format: '%(name)s %(asctime)s %(levelname)s %(message)s'
datefmt: '%d/%m/%Y %H:%M:%S'
root:
level: INFO
handlers: [console, file]
mod:
level: DEBUG
----- mod.py
import logging
def foo():
log = logging.getLogger (__name__)
log.debug ('Hello from the module')
---- main.py
from logging.config import dictConfig
import yaml
with open ('logging.yaml') as flog:
dictConfig (yaml.load (flog))
import logging
from mod import foo
if __name__ == '__main__':
log = logging.getLogger (__name__)
log.debug ('Hello from main')
foo()
Mit der Konfiguration oben würde ich erwarten, nur zu sehen die Nachricht 'Hello from the module'
. Stattdessen wird nichts gedruckt. Wenn ich DEBUG
für den Stammlogger einstelle, werden beide Nachrichten gedruckt.
Also, werden die Nachrichten nicht an die oberen Logger weitergeleitet? Ist der mod
Logger kein Kind von root
? Akzeptiert der Logger mod
nicht die Konfiguration handlers
? (Ich habe versucht, handlers
in mod
zu wiederholen, aber nichts ändert sich).
Wie kann ich eine Konfiguration erreichen sagen: Standardebene ist INFO
, das Niveau für dieses Modul und Untermodule ist DEBUG
, alles an den Handler für root
definiert geht?
Ich werde nur hier setzen: https://www.python.org/dev/peps/pep-0008/ – jonrsharpe