JMW*_*JMW 8 python logging formatter
我的模块中有以下ColoeredFormatter.
但格式化程序不会被调用.我希望在控制台上"hi",但我得到"这是根记录器的信息".
我已经删除了所有.pyc文件,但它没有帮助.
MyModule的/ __ init__.py
from MyModule.ColoredFormatter import ColoredFormatter
__all__ = ('ColoredFormatter')
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我的剧本
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")
Run Code Online (Sandbox Code Playgroud)
JMW*_*JMW 12
在格式化部分我不得不更换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")
Run Code Online (Sandbox Code Playgroud)
小智 9
我想补充一点,可调用对象接受工厂,dictConfig.将自定义参数传递给构造函数的简写是利用 lambda。
例子:
from MyModule import ColoredFormatter
...
'formatters':
'()': lambda: ColoredFormatter(foo='bar', ...),
Run Code Online (Sandbox Code Playgroud)