2017-03-03 83 views
2

請考慮這個虛擬代碼。Python日誌記錄模塊輸出不必要的信息

$ cat dummy.py 
import logging 
import time 

from boto3.session import Session 

# Logging Configuration 
fmt = '%(asctime)s [%(levelname)s] [%(module)s] - %(message)s' 
logging.basicConfig(level='INFO', format=fmt, datefmt='%m/%d/%Y %I:%M:%S') 
logger = logging.getLogger() 

def main(): 
    session = Session(region_name='us-west-2') 
    client = session.client('ec2') 
    response = client.describe_instances(InstanceIds=['i-11111111111111111']) 

    logger.info('The instnace size is: %s', response[ 
       'Reservations'][0]['Instances'][0]['InstanceType']) 

if __name__ == '__main__': 
    main() 

輸出:

$ python3 dummy.py 
03/03/2017 08:47:00 [INFO] [credentials] - Found credentials in shared credentials file: ~/.aws/credentials 
03/03/2017 08:47:01 [INFO] [connectionpool] - Starting new HTTPS connection (1): ec2.us-west-2.amazonaws.com 
03/03/2017 08:47:02 [INFO] [dummy] - The instnace size is: t2.micro 

問題: 如何避免下面線被打印?

03/03/2017 08:47:00 [INFO] [credentials] - Found credentials in shared credentials file: ~/.aws/credentials 
03/03/2017 08:47:01 [INFO] [connectionpool] - Starting new HTTPS connection (1): ec2.us-west-2.amazonaws.com 

如果我改變logging.basicConfig(level='INFO',...logging.basicConfig(level='WARNING',...然後,這些消息不打印,但隨後我得到的消息記錄與WARNING嚴重性。

我只想要logging模塊打印我明確使用logger.info ....寫入的消息,而沒有其他東西。因此,我需要關於如何避免不必要的消息被打印的指示。

+0

你不能僅僅爲自己申請一個過濾器嗎? – River

+0

儘管可能不是一個確切的重複,你應該能夠在[這個問題]中找到你要找的東西(http://stackoverflow.com/questions/11029717/how-do-i-disable-log-messages-來自該請求庫)。 – glibdud

+0

@glibdud,你提到的問題不是解決方案/解決方法,我已經在我的文章中提到過。謝謝你的時間。 – slayedbylucifer

回答

0

解決方案:

import logging 
import time 

from boto3.session import Session 

# Logging Configuration 
fmt = '%(asctime)s [%(levelname)s] [%(module)s] - %(message)s' 
logging.basicConfig(format=fmt, datefmt='%m/%d/%Y %I:%M:%S') 
logger = logging.getLogger('LUCIFER') 
logger.setLevel(logging.INFO) 


def main(): 
    COUNTER = 3 
    session = Session(region_name='us-west-2') 
    client = session.client('ec2') 
    response = client.describe_instances(InstanceIds=['i-0a912622af142b510']) 

    logger.info('The instnace size is: %s', response[ 
       'Reservations'][0]['Instances'][0]['InstanceType']) 

if __name__ == '__main__': 
    main() 

輸出:

$ python3 dummy.py 
03/03/2017 10:30:15 [INFO] [dummy] - The instnace size is: t2.micro 

說明: 早些時候,我設置根記錄的INFO水平。因此,沒有水平集的所有其他記錄儀都會獲得此水平propagated並開始記錄。在解決方案中,我特別在記錄器LUCIFER上啓用此級別。

參考: 來自:https://docs.python.org/3/howto/logging.html

子logger消息傳播了與他們的祖先記錄器相關的處理程序。因此,不必爲應用程序使用的所有記錄器定義和配置處理程序。爲頂級記錄器配置處理程序並根據需要創建子記錄器就足夠了。 (你可以,但是,通過設置一個記錄器爲False的繁殖屬性關閉傳播。)

AND

除了直接與記錄器相關聯的任何處理程序,與所述記錄器的所有祖先有關的所有處理程序被調用來分派消息(除非記錄器的傳播標誌被設置爲假值,此時傳遞給祖先處理程序停止)。

相關問題