我发现django独立脚本有一个非常奇怪的行为: 当我想用python loggin服务打印一些调试信息时, 我必须导入django.db才能看到它们:为什么?
我正在使用Django 1.4.5
以下是测试用例:
我创建了一个空白项目:
django-admin.py startproject mysite
我将日志记录参数定义到settings.py:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'simple': {
'format': '%(levelname)-8s : %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
},
'loggers': {
'mysite': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}
将独立脚本写在settings.py:
所在的目录中script.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.core.management import setup_environ
import settings
setup_environ(settings)
import logging
logger = logging.getLogger('mysite')
#import django.db
logger.debug('hello logging !')
当导入django.db不存在时:
(no output)
当导入django.db时:
'DEBUG : hello logging !' is printed on console
是否可以在不导入我不需要的django.db的情况下查看调试信息?
答案 0 :(得分:1)
您应该编写django custom command。
,而不是编写独立脚本回答您的问题,可以通过访问django.db
模块中的django.conf.settings
属性来实现此行为。
Django设置是懒惰对象。一旦请求任何设置属性,延迟设置对象初始化设置对象并执行日志记录配置。
查看LazySettings中的方法链:
__getattr__
致电_setup
_setup
致电_configure_logging