2015-03-25 41 views
1

我有一個Python應用程序,它使用動態發現的插件來擴展它的功能。我想弄清楚什麼是從插件中記錄信息的最佳方式。我認爲至少有兩種解決方案。無論是創建記錄器的層次結構:Python日誌記錄:subloggers或額外信息

myapp 
myapp.plugin1 
myapp.plugin2 

而且withing基礎應用:

logger = logging.getLogger('myapp') 
logger.debug('mymessage') 

和withing的plugin1

logger = logging.getLogger('myapp.plugin1') 
logger.debug('mymessage from plugin1') 

或者我添加使用在該extra參數的其他信息默認記錄器: 在基本應用程序內:

logger = logging.getLogger('myapp') 
logger.debug('mymessage', extra=dict(plugin=None) 

在plugin1

logger = logging.getLogger('myapp') 
logger.debug('mymessage from plugin1', extra=dict(plugin='plugin1') 

什麼是這兩個方案之間的優勢和劣勢(如果有的話)?

回答

0

Python世界中的最佳實踐是每個Python模塊都聲明自己的記錄器。在每個文件的頭部你必須:

import logging 

logger = logging.getLogger(__name__) 

然後你有你的Python模塊在漂亮的層次,讓你可以告訴增加或減少使用分層的虛線包名稱查找包的日誌記錄級別。一些示例:

'django': { 
     'handlers': ['mail_admins'], 
     'level': 'WARN', 
     'propagate': True, 
    }, 


    'django.request': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True, 
    }, 

    'django.db.backends': { 
     'handlers': [], 
     'level': 'ERROR', 
     'propagate': True, 
    },