2015-03-25 111 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, 
    },