Django独立脚本:需要导入django.db才能看到日志记录

时间:2014-03-03 16:13:02

标签: python django

我发现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的情况下查看调试信息?

1 个答案:

答案 0 :(得分:1)

您应该编写django custom command

,而不是编写独立脚本

回答您的问题,可以通过访问django.db模块中的django.conf.settings属性来实现此行为。

Django设置是懒惰对象。一旦请求任何设置属性,延迟设置对象初始化设置对象并执行日志记录配置。

查看LazySettings中的方法链:

  1. __getattr__致电_setup
  2. _setup致电_configure_logging