使用 python logging 将记录器名称缩写或缩短为首字母
abbreviate or shorten the logger name to initials with python logging
我正在尝试实现 log4j 中可用的行为,this SO Q&A
中对此进行了描述
而不是记录器产生以下输出(注意完整的模块名称)
DEBUG aproject.bpackage.cclass:filename.py:79 log message 1
我只想记录器的首字母 name
:
DEBUG a.b.c:filename.py:79 log message 1
试图用 the manual 找出正确的格式字符串,但没有提到记录器的首字母 name
请注意,记录器使用模块名称作为约定进行初始化:
logger = logging.getLogger(__name__)
没有 out-of-the-box 功能,但您可以使用类似这样的方法获得所需的结果:
import logging
class CustomFormatter(logging.Formatter):
def format(self, record):
saved_name = record.name # save and restore for other formatters if desired
parts = saved_name.split('.')
# import pdb; pdb.set_trace()
record.name = '.'.join(p[0] for p in parts)
result = super().format(record)
record.name = saved_name
return result
h = logging.StreamHandler()
f = CustomFormatter('%(name)-6s %(message)s')
h.setFormatter(f)
root = logging.getLogger()
root.addHandler(h)
root.setLevel(logging.DEBUG)
logging.getLogger('alpha.beta.gamma').debug('foo')
logging.getLogger('delta.epsilon.zeta').debug('bar')
logging.getLogger('eta.theta').debug('baz')
当运行时,上面的脚本输出
a.b.g foo
d.e.z bar
e.t baz
我正在尝试实现 log4j 中可用的行为,this SO Q&A
中对此进行了描述而不是记录器产生以下输出(注意完整的模块名称)
DEBUG aproject.bpackage.cclass:filename.py:79 log message 1
我只想记录器的首字母 name
:
DEBUG a.b.c:filename.py:79 log message 1
试图用 the manual 找出正确的格式字符串,但没有提到记录器的首字母 name
请注意,记录器使用模块名称作为约定进行初始化:
logger = logging.getLogger(__name__)
没有 out-of-the-box 功能,但您可以使用类似这样的方法获得所需的结果:
import logging
class CustomFormatter(logging.Formatter):
def format(self, record):
saved_name = record.name # save and restore for other formatters if desired
parts = saved_name.split('.')
# import pdb; pdb.set_trace()
record.name = '.'.join(p[0] for p in parts)
result = super().format(record)
record.name = saved_name
return result
h = logging.StreamHandler()
f = CustomFormatter('%(name)-6s %(message)s')
h.setFormatter(f)
root = logging.getLogger()
root.addHandler(h)
root.setLevel(logging.DEBUG)
logging.getLogger('alpha.beta.gamma').debug('foo')
logging.getLogger('delta.epsilon.zeta').debug('bar')
logging.getLogger('eta.theta').debug('baz')
当运行时,上面的脚本输出
a.b.g foo
d.e.z bar
e.t baz