2014-02-21 40 views
11

我的日志记录设置的样子Python:如何禁止来自第三方库的日志记录?

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

'logging.getLogger('requests').setLevel(logging.ERROR)'? – jfs

+2

我得到了答案从 https://stackoverflow.com/questions/11029717/how-do-i-disable-log-messages-from-the-requests-library – daydreamer

回答

1

你想要做的是应用一个过滤器将所有的记录器,这样就可以控制哪些被发射。我可以找到将过滤器应用于所有记录器的唯一方法是通过从logging.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) 

希望这有助于!

+0

这是没有必要的 - 见我的答案。 –

7

您叫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,例如,你只会看到BBProposalGenerator及其后代ERROR或所有其他记录器高,但INFO或更高。

相关问题