设置 Django 日志时是否可以通配一个包?
现在我的 LOGGING
看起来像:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'mypack.mod1': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
'mypack.mod2': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
},
}
我的问题是,有什么方法可以避免
mypack.mod1
和 mypack.mod2
都需要一个部分。 最佳答案
是的,有一种方法(甚至有几种)。最简单的(也可能是最好的)方法是这样定义你的记录器:
'mypack': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
在
mypack.mod2
中调用 logger = logging.getLogger(__name__)
时,名称实际上是 mypack.mod2
。如果 python 找不到 mypack.mod2
的记录器,则使用虚线表示法,它将尝试寻找其父级(如果您有多个层,例如 mypack.mod1.submod3.subsubmod42
,则继续),并会被名为 mypack
的记录器捕获。另一种方法(尽管我不推荐它,除非你真的知道你在做什么)是通过使用
logger = logging.getLogger('TheNameOfTheLoggerIWantToCall')
而不是通常的 __name__
调用,通过名称显式调用特定的记录器您还可以查看 https://docs.djangoproject.com/en/1.8/topics/logging/#naming-loggers 以获取更多信息。
[更新]
在“父级层次结构”的相同原则下,以空字符串命名的记录器将捕获所有内容(不仅是 Django,还包括来自每个正在使用的 Python 模块的每个日志)
关于python - 通配符 Django 日志记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29642243/