我从事一个开源项目,在该项目中,我们曾经允许所有模块登录到根记录器:
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 /静态检查来强制执行此策略,以使其他人不会登录到根记录器?
答案 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,它们仍会将其日志传播到根记录器。