我的日志记录设置如下
import requests
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('BBProposalGenerator')
当我运行它时,我将日志作为
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
如何禁止requests
包中的日志语句?所以我只看到我的代码中的日志
INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac
由于
答案 0 :(得分:10)
您使用basicConfig()
级别调用了logging.INFO
,它将根记录器的有效级别设置为INFO
,并且所有后代记录器都没有明确设置级别。这包括requests
记录器,并解释了您获得这些结果的原因。
相反,你可以做
logging.basicConfig()
将使级别保持默认值WARNING
,但添加一个处理程序,将日志消息输出到控制台。然后,将记录器上的级别设置为INFO
:
logger = logging.getLogger('BBProposalGenerator')
logger.setLevel(logging.INFO)
现在,INFO
和更高严重性事件记录到记录器BBProposalGenerator
或其任何后代将被打印,但根记录器(以及其他后代,例如requests.XXX
)将保持WARNING
级别,仅显示WARNING
或更高级别的消息。
当然,您可以在basicConfig()
调用中指定更高级别 - 例如,如果您指定ERROR
,则只能看到所有其他记录器中的ERROR
或更高级别,但是来自INFO
及其后代的BBProposalGenerator
或更高。
答案 1 :(得分:2)
您要做的是对所有记录器应用过滤器,以便您可以控制发出的内容。我可以找到将过滤器应用于所有记录器的唯一方法是使用从logging.Logger派生的东西初始化日志记录Logger类并在那里应用过滤器。如此:
class MyFilter(logging.Filter):
def filter(self, record):
if record.name != 'BBProposalGenerator':
return False
return True
class MyLogger(logging.Logger):
def __init__(self, name):
logging.Logger.__init__(self, name)
self.addFilter(MyFilter())
然后您需要做的就是,在实例化任何记录器之前,将默认记录器类设置为派生类,如下所示:
logging.setLoggerClass(MyLogger)
logging.basicConfig(level=logging.INFO)
希望这有帮助!