Python日志记录:子记录程序或额外信息

时间:2015-03-25 01:57:30

标签: python logging

我有一个Python应用程序,它使用动态发现的插件来扩展它的功能。我试图弄清楚从插件中记录信息的最佳方法是什么。我认为至少有两种解决方案。我要么创建一个记录器层次结构:

myapp
myapp.plugin1
myapp.plugin2

使用基础应用程序:

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

并使用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')

这两种方案之间有哪些优点或缺点(如果有的话)?

1 个答案:

答案 0 :(得分: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,
    },