对Python强制执行无根记录程序策略

时间:2019-11-14 21:01:28

标签: python logging

我从事一个开源项目,在该项目中,我们曾经允许所有模块登录到根记录器:

import logging


def my_function():
  logging.info('Logging something on the root- logger')

我们正在使用按模块记录器,就像这样:

import logging

_LOGGER = logging.getLogger(__name__)


def my_function():
  _LOGGER.info('Logging something on the root- logger')

是否可以通过Linter /静态检查来强制执行此策略,以使其他人不会登录到根记录器?

1 个答案:

答案 0 :(得分:1)

如果要查找所有发生这种情况的情况,那么使用静态检查绝对不可能做到这一点。基本上,您可以达到的最佳效果是在源代码中寻找字符串logging.[info|debug|...]。静态检查器很容易被这样的东西欺骗:

logger_name = 'root' # might even read this from a config file
_LOGGER = logging.getLogger(logger_name) # static check has no way to know here that we get the root logger 
_LOGGER.info('logging this to root')

此外,如果您未在模块级记录器上将propagate设置为false,它们仍会将其日志传播到根记录器。