Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python日志:子日志或额外信息_Python_Logging - Fatal编程技术网

Python日志:子日志或额外信息

Python日志:子日志或额外信息,python,logging,Python,Logging,我有一个Python应用程序,它使用动态发现的插件来扩展it功能。我试图找出从插件中记录信息的最佳方式。我认为至少有两种解决办法。或者我创建了一个记录器的层次结构: myapp myapp.plugin1 myapp.plugin2 使用基本应用程序: logger = logging.getLogger('myapp') logger.debug('mymessage') logger = logging.getLogger('myapp') logger.debug('mymessage

我有一个Python应用程序,它使用动态发现的插件来扩展it功能。我试图找出从插件中记录信息的最佳方式。我认为至少有两种解决办法。或者我创建了一个记录器的层次结构:

myapp
myapp.plugin1
myapp.plugin2
使用基本应用程序:

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

logger = logging.getLogger('myapp.plugin1')
logger.debug('mymessage from plugin1')
或者我使用默认记录器中的
extra
参数添加附加信息: 在基本应用程序中:

logger = logging.getLogger('myapp')
logger.debug('mymessage')
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模块位于nice层次结构中,这样您就可以使用虚线包名查找按层次结构增加或减少包日志记录级别。一些例子:

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