上述解决方案适用于3.3.3版本。但是在3.3.4中,您会遇到以下错误。
FORMATS = { logging.DEBUG : logging._STYLES['{']("{module} DEBUG: {lineno}: {message}"),
类型错误:'tuple'对象不可调用
在logging类Lib\logging__init__.py中进行了一些搜索后,我发现从3.3.3到3.3.4更改了数据结构,导致了这个问题。
3.3.3
_STYLES = {
'%': PercentStyle,
'{': StrFormatStyle,
'$': StringTemplateStyle
}
3.3.4
_STYLES = {
'%': (PercentStyle, BASIC_FORMAT),
'{': (StrFormatStyle, '{levelname}:{name}:{message} AA'),
'$': (StringTemplateStyle, '${levelname}:${name}:${message} BB'),
}
更新后的解决方案是:
class SpecialFormatter(logging.Formatter):
FORMATS = {logging.DEBUG : logging._STYLES['{'][0]("{module} DEBUG: {lineno}: {message}"),
logging.ERROR : logging._STYLES['{'][0]("{module} ERROR: {message}"),
logging.INFO : logging._STYLES['{'][0]("{module}: {message}"),
'DEFAULT' : logging._STYLES['{'][0]("{module}: {message}")}
def format(self, record):
self._style = self.FORMATS.get(record.levelno, self.FORMATS['DEFAULT'])
return logging.Formatter.format(self, record)
`fmt = MyFormatter()`
`hdlr = logging.StreamHandler(sys.stdout)`
<CR>
hdlr.setFormatter(fmt)<CR>
logging.root.addHandler(hdlr)<CR>
logging.root.setLevel(DEBUG)`<CR> - halloleologging.Formatter.format
现在依赖于__init__
方法的style
参数。 - Evpokself._style = logging.PercentStyle(self._fmt)
。 - Ross Rsuper()
ن»£و›؟调用logging.Formatter
ن¼ڑن¸چن¼ڑ让ه®ƒهڈکه¾—و›´ه¥½ï¼ں - phoenix