Django使用多个设置文件进行日志记录

时间:2015-08-13 08:56:53

标签: python django logging django-settings

Django日志记录存在两个问题。我有这个三层的项目结构布局,我已经写下来了。

我的两个问题是:

1)我只想为每个写入控制台的应用程序提供一个唯一的记录器。现在实现这一目标的唯一方法是按应用添加应用,就像我现在正在做的那样。 (我想我会使用我修改过的'root'记录器。你可以看到设置文件中的行)

2)当记录内部一个设置文件时,控制台会显示此警告:

No handlers could be found for logger "sonata.settings.local"

我希望能够记录我的设置文件。

项目结构布局

.
├── docs
├── requirements
├── scripts
└── sonata
    ├── person
    │   └── templatetags
    ├── registration
    ├── sonata
    │   └── settings
    │       ├── base.py
    │       ├── heroku.py
    │       ├── local.py
    |       └── production.py
    ├── static
    │   ├── css
    │   │   └── images
    │   ├── fonts
    │   └── js
    ├── templates
    │   ├── personApp
    │   └── registrationApp
    └── utils
        └── templatetags

记录在base.py(主要设置文件)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        '' : {
            'handlers':['console'],
            'level':'DEBUG',
        },
        'sonata.settings.heroku' : {
            'handlers':['console'],
            'level':'DEBUG',
        },
        'registration' : {
            'handlers':['console'],
            'level':'DEBUG',
        },
        'person' : {
            'handlers':['console'],
            'level':'DEBUG',
        }
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO'
    },
}

1 个答案:

答案 0 :(得分:1)

要使您的日志记录配置生效,必须加载您的设置。如果您登录您的设置文件(或由其导入的模块),您的日志记录配置尚未加载。

查看django/__init__.py

...
from django.conf import settings
from django.utils.log import configure_logging
...

您的设置文件中的语句LOGGING = ...并未实际配置日志记录系统。记录的配置在加载设置后发生。

您可以直接使用logging模块在​​设置文件中手动配置日志记录,但我建议您首先评估确实是否需要登录您的设置文件。