Ich habe den folgenden Code läuft auf jede Anforderung eines wsgi (web2py) Anwendung:Ersetzen Standard-Handler von Python-Logger
import logging, logging.handlers
from logging import StreamHandler, Formatter
def get_configured_logger(name):
logger = logging.getLogger(name)
if (len(logger.handlers) == 0):
# This logger has no handlers, so we can assume it hasn't yet been configured (Django uses similiar trick)
# === Configure logger ===
# Create Formatted StreamHandler:
FORMAT = "%(process)s %(thread)s: %(message)s"
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug('CONFIGURING LOGGER')
return logger
# Get app specific logger:
logger = get_configured_logger(request.application)
logger.debug("TEST")
Es soll den Logger einmal konfigurieren, mit dem formatierten Handler ich will. Es funktioniert, außer, dass ich erhalte doppelte Einträge in meinem stdout:
81893 4329050112: CONFIGURING LOGGER
DEBUG:dummy:CONFIGURING LOGGER
81893 4329050112: TEST
DEBUG:dummy:TEST
Wie kann ich eine neue formatiert Handler und loszuwerden/verstecken Standard ein?
Ich habe diese Klasse nie zuvor verwendet, aber denken Sie nicht, dass logger.setLevel (logging.DEBUG) und logger.debug eine Art redundant ist? – MiJyn
lkjoel- Nein, das sind zwei verschiedene Dinge. Das Aufrufen von '.debug (..)' erstellt Protokolleinträge auf der Debug-Ebene, während die Protokollierungsebene dem Handler mitteilt, * Protokolleinträge auf dieser Ebene * zu behandeln. – Yarin
Nennen Sie 'logging.basicConfig' irgendwo? Wenn ja, kommentieren Sie das aus. – unutbu