logging-extra-attr-clash (G101)
派生自 flake8-logging-format linter。
作用
检查日志语句中与 LogRecord 属性冲突的 extra 关键字。
为什么这不好?
logging 模块提供了一种机制,可以使用 extra 关键字参数传递要记录的附加值。 这些值随后会传递给 LogRecord 构造函数。
通过 extra 提供的值与 LogRecord 构造函数的属性之一冲突,将在构造 LogRecord 时引发 KeyError。
已知问题
此规则通过启发式方法检测 logging 模块的使用。具体来说,它匹配:
logging模块本身的使用(例如,import logging; logging.info(...))。flask.current_app.logger的使用(例如,from flask import current_app; current_app.logger.info(...))。- 名称以
log开头或以logger或logging结尾的对象,当在定义它们的同一文件中使用时(例如,logger = logging.getLogger(); logger.info(...))。 - 导入的对象通过
lint.logger-objects设置标记为记录器,该设置可用于针对共享记录器对象强制执行这些规则(例如,from module import logger; logger.info(...),当lint.logger-objects设置为["module.logger"]时)。
示例
import logging
logging.basicConfig(format="%(name) - %(message)s", level=logging.INFO)
username = "Maria"
logging.info("Something happened", extra=dict(name=username))
建议改为
import logging
logging.basicConfig(format="%(user_id)s - %(message)s", level=logging.INFO)
username = "Maria"
logging.info("Something happened", extra=dict(user_id=username))