2016-02-20 45 views
6

我在我的模塊中有以下ColoeredFormatter。python日誌記錄dictConfig自定義格式化程序不被稱爲

但格式化程序沒有被調用。我希望控制檯上有「hi」,但我得到「這是根記錄器的信息」。

我已經刪除了所有的.pyc文件,但沒有幫助。

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) 

我的腳本

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") 

回答

7

在格式化部分我不得不()

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

更換class你能請詳細說明你是如何得到這些信息?我無法在任何地方找到 – Hagai

+0

@Hagai一些信息可以在[Python logging documentation](https://docs.python.org/3/library/logging.config.html#dictionary-schema-details)中找到。 – Evert

+0

謝謝@Evert,這有點難以找到,所以對於下一代:你可以在「user-defined-objects」部分找到它https://docs.python.org/2/library/logging.config html的#用戶定義的對象 – Hagai

相關問題