在使用 python 日志记录 `%(funcName)s` 时,您可以缩短日志记录 headers 吗?
Can you shorten logging headers when using python logging `%(funcName)s`?
有时我使用 %(funcName)s
配置 python 日志格式器。但是当函数名很长时我不喜欢这样。
在使用 python 日志记录 %(funcName)s
时,可以缩短日志记录 headers 吗?如果是,如何?
你能说...限制字符总数为 10 个字符吗?
您可以扩展 logging.formatter
class 以获得所需的格式,如下所示。
这只是一个例子。你应该根据你的要求修改它
class MyFormatter(logging.Formatter):
in_console = False
def __init__(self):
self.mod_width = 30
self.datefmt = '%H:%M:%S'
def format(self, record):
s = []
cmodule = record.module + ":" + str(record.lineno)
cmodule = cmodule[-self.mod_width:].ljust(self.mod_width)
format_str = ("%-7s %s %s" % (record.levelname, self.formatTime(record, self.datefmt), cmodule))
pad_len = len(format_str)
for line in record_msg[1:]:
line = " " * pad_len + " : " + line
s.append(line)
s = "%s : %s" % (format_str, "\n".join(s))
return s
my_formatter = MyFormatter()
log.setFormatter(my_formatter)
日志格式字符串中的 %(...)s
项是 % 替换,您可以通过执行类似 %(funcName).10s
的操作来限制字符串替换的长度
例如
import logging
logging.basicConfig(
format='%(funcName).10s %(message)s',
level=logging.INFO,
)
logger = logging.getLogger()
def short():
logger.info("I'm only little!")
def really_really_really_really_long():
logger.info("I'm really long")
short()
really_really_really_really_long()
给予
andy@batman[17:54:01]:~$ p tmp_x.py
short I'm only little!
really_rea I'm really long
有时我使用 %(funcName)s
配置 python 日志格式器。但是当函数名很长时我不喜欢这样。
在使用 python 日志记录 %(funcName)s
时,可以缩短日志记录 headers 吗?如果是,如何?
你能说...限制字符总数为 10 个字符吗?
您可以扩展 logging.formatter
class 以获得所需的格式,如下所示。
这只是一个例子。你应该根据你的要求修改它
class MyFormatter(logging.Formatter):
in_console = False
def __init__(self):
self.mod_width = 30
self.datefmt = '%H:%M:%S'
def format(self, record):
s = []
cmodule = record.module + ":" + str(record.lineno)
cmodule = cmodule[-self.mod_width:].ljust(self.mod_width)
format_str = ("%-7s %s %s" % (record.levelname, self.formatTime(record, self.datefmt), cmodule))
pad_len = len(format_str)
for line in record_msg[1:]:
line = " " * pad_len + " : " + line
s.append(line)
s = "%s : %s" % (format_str, "\n".join(s))
return s
my_formatter = MyFormatter()
log.setFormatter(my_formatter)
日志格式字符串中的 %(...)s
项是 % 替换,您可以通过执行类似 %(funcName).10s
例如
import logging
logging.basicConfig(
format='%(funcName).10s %(message)s',
level=logging.INFO,
)
logger = logging.getLogger()
def short():
logger.info("I'm only little!")
def really_really_really_really_long():
logger.info("I'm really long")
short()
really_really_really_really_long()
给予
andy@batman[17:54:01]:~$ p tmp_x.py
short I'm only little!
really_rea I'm really long