2016-02-20 5 views
6

Ich habe den folgenden ColoredFormatter in meinem Modul.Python Logging dictConfig benutzerdefinierter Formatierer wird nicht aufgerufen

Aber der Formatierer wird nicht aufgerufen. Ich erwarte "Hi" auf der Konsole, aber ich bekomme "Dies ist eine Info des Root-Loggers".

Ich habe bereits alle .pyc-Dateien gelöscht, aber es hat nicht geholfen.

MyModule/__ init__.py

from MyModule.ColoredFormatter import ColoredFormatter 

__all__ = ('ColoredFormatter') 

MyModule/ColoredFormatter.py

import logging 

class ColoredFormatter(logging.Formatter): 
    def __init__(self, default): 
     self.default = default 

    def format(self, record): 
     print("hi") 
     record.msg = "hi" 
     return self.default.format(record) 

My Script

import logging, logging.config, yaml 

conf=""" 
logging: 
    version: 1 
    disable_existing_loggers: true 
    root: 
    level: !!python/name:logging.NOTSET 
    handlers: [console] 
    handlers: 
    console: 
     class: logging.StreamHandler 
     stream: ext://sys.stdout 
     formatter: myFormatter 
     level: !!python/name:logging.NOTSET 

    formatters: 
    myFormatter: 
     class: !!python/name:MyModule.ColoredFormatter 
""" 
dict = yaml.parse(conf) 
logging.config.dictConfig(dict["logging"]) 

logging.info("This is an info of the root logger") 

Antwort

7

in dem Formatierungsabschnitt hatte ich class von ()

import logging, logging.config, yaml 

conf=""" 
logging: 
    version: 1 
    disable_existing_loggers: true 
    root: 
    level: !!python/name:logging.NOTSET 
    handlers: [console] 
    handlers: 
    console: 
     class: logging.StreamHandler 
     stream: ext://sys.stdout 
     formatter: myFormatter 
     level: !!python/name:logging.NOTSET 

    formatters: 
    myFormatter: 
     '()': MyModule.ColoredFormatter 
""" 
dict = yaml.parse(conf) 
logging.config.dictConfig(dict["logging"]) 

logging.info("This is an info of the root logger") 
+1

ersetzen Können Sie bitte erarbeiten, wie Sie auf diese Informationen bekommen? Ich konnte es nirgendwo finden – Hagai

+0

@Hagai einige Informationen können in der [Python Protokollierung Dokumentation] gefunden werden (https://docs.python.org/3/library/logging.config.html#dictionary-schema-details). – Evert

+0

Danke @Evert, Es war ein bisschen schwer zu finden, also für die nächsten Generationen: Sie finden es im Bereich "Benutzerdefinierte Objekte" https://docs.python.org/2/library/logging.config .html # benutzerdefinierte Objekte – Hagai

Verwandte Themen