跳过主要内容

未提供项目描述

项目描述

flake8-logging-format

Flake8扩展,用于验证(缺少)日志格式字符串

这是什么?

Python logging 支持一个特殊的 extra 关键字,用于传递包含用户定义属性的字典,以包含在日志事件中。确保日志一致性的一种方法始终使用 extra 来传递非常量数据,因此绝不应该使用格式字符串、连接或其他类似技术来构造日志字符串。

换句话说,这样做

logger.info(
    "Hello {world}",
    extra=dict(
        world="Earth"
    )
)

而不是这样做

logger.info(
    "Hello {world}".format(world=Earth)
)

额外白名单

作为进一步严格的一步,我们可以强制执行extra字典只使用已知白名单中的键。

用法

flake8 --enable-extra-whitelist

内置的Whitelist支持使用entry_points的插件,键为"logging.extra.whitelist"。每个已注册的入口点必须是一个可调用的函数,该函数返回一个字符串的可迭代对象。

在某些情况下,您可能只想在调试场景中记录敏感数据。这以两种方式得到支持

  1. 我们不检查debug级别的日志行中的logging.extra.whitelist
  2. 您还可以将关键字前缀为'debug_',并在另一个级别中记录它。您可以安全地假设这些将被过滤出分发的日志。

检测到的违规

  • G001 日志语句不应使用 string.format() 作为其第一个参数
  • G002 日志语句不应使用 % 格式化作为其第一个参数
  • G003 日志语句不应使用 + 连接作为其第一个参数
  • G004 日志语句不应使用 f"..." 作为其第一个参数(仅在Python 3.6+中)
  • G010 日志语句不应使用 warn(使用 warning 代替)
  • G100 日志语句不应使用未列入白名单的 extra 参数
  • G101 记录语句不应使用与 LogRecord 字段冲突的 extra 参数
  • G200 记录语句不应在记录的字符串中包含异常(使用 exceptionexc_info=True
  • G201 记录语句不应使用 error(..., exc_info=True)(应使用 exception(...) 代替)
  • G202 记录语句不应在 exception 中使用冗余的 exc_info=True

这些违规行为默认是禁用的。要为您的项目启用它们,请在 setup.cfg 中指定代码

[flake8]
enable-extensions=G

动机

我们的动机与平衡我们团队和客户的需求有关。一方面,开发人员和一线支持人员应该能够查看应用程序日志。另一方面,我们的客户不希望他们的数据与任何人共享,包括内部员工。

实现方法有两种

  1. 通过尝试防止在日志中使用字符串连接(与标准日志 extra 字典中的显式变量传递相比)

  2. 通过提供(可选)机制以白名单形式列出可能出现在 extra 字典中的字段名称

当然,这 不会 阻止开发人员做类似的事情

extra=dict(
    user_id=user.name,
)

但是,避免这种情况最终会回到其他流程,如拉取请求、代码审查和内部政策。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

此版本没有可用的源代码分发文件。请参阅有关 生成分发存档 的教程。

构建分发

flake8_logging_format-2024.24.12-py3-none-any.whl (11.5 kB 查看哈希值)

上传时间 Python 3

由以下支持