![](/img/trans.png)
[英]Custom Python logging formatter works with fileConfig but not with dictConfig?
[英]python logging dictConfig custom formatter is not being called
我的模塊中有以下 ColoeredFormatter。
但是 The Formatter 不會被調用。 我希望在控制台上顯示“hi”,但我得到“這是根記錄器的信息”。
我已經刪除了 all.pyc 文件,但沒有幫助。
我的模塊/__init__.py
from MyModule.ColoredFormatter import ColoredFormatter
__all__ = ('ColoredFormatter')
我的模塊/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")
在格式化程序部分我不得不用()
替換class
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")
我想補充一點,可調用對象接受dictConfig.
將自定義 arguments 傳遞給構造函數的簡寫是使用 lambda。
例子:
from MyModule import ColoredFormatter
...
'formatters':
'()': lambda: ColoredFormatter(foo='bar', ...),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.