繁体   English   中英

Python日志记录:子记录器或其他信息

[英]Python logging: subloggers or extra information

我有一个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')

这两种方案之间的优缺点(如果有)是什么?

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,
    },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM