import logging
import re
class CustomFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
arg_pattern = re.compile(r'%\((\w+)\)')
arg_names = [x.group(1) for x in arg_pattern.finditer(self._fmt)]
for field in arg_names:
if field not in record.__dict__:
record.__dict__[field] = None
return super().format(record)
logger = logging.getLogger(__name__)
handler = logging.StreamHandler()
formatter = CustomFormatter('{"message": "%(message)s", "user": "%(user)s"}')
handler.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.info('hi')
logger.info('hi', extra={"user": "asmith"})
可选格式参数替换为
None
给定固定的日志格式字符串,可以使用自定义的
Formatter
类将缺少的参数替换为None
输出
动态地向日志输出添加额外的参数
自定义
Formatter
可以根据传递给extra
的字典动态更新格式字符串输出
相关问题 更多 >
编程相关推荐