【问题标题】:Django logging with several settings files带有多个设置文件的 Django 日志记录
【发布时间】:2015-11-06 03:43:46
【问题描述】:

我在使用 Django 日志记录时遇到了两个问题。我有这个 3 层项目结构布局,我已经写得更清楚了。

我的两个问题是:

1) 我希望每个写入控制台的应用程序只有一个唯一的记录器。现在实现这一点的唯一方法是逐个添加应用程序,就像我现在正在做的那样。 (我想我可以让它与我修改的“root”记录器一起工作。你可以在设置文件中看到这一行)

2) 当进入 inside 一个设置文件时,控制台会显示以下警告:

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

【问题讨论】:

    标签: python django logging django-settings


    【解决方案1】:

    为了使您的日志记录配置处于活动状态,您的设置必须被加载。如果您登录您的设置文件(或由它导入的模块),您的日志配置尚未加载。

    看看django/__init__.py:

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

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

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

    【讨论】:

    • 但是我的 local.py “继承”(不确定是否是正确的词)来自 base.py 所有的日志记录(它有一个“from base import *”)和 logging.getLogger( name) 在那之后。
    • 这没什么区别。请参阅我的编辑以获取更多说明
    • 好的。我现在知道了。 (2)明确了,(1)有什么解决办法吗?
    • 您是否尝试将您的root 记录器设置为日志级别DEBUG?您的 root 记录器的日志级别为 INFO,您的个人记录器的日志级别为 DEBUG
    • 我发现设置一个空字符串作为键('')的记录器似乎有效。
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2013-09-11
    • 2021-11-06
    • 2010-12-08
    • 2018-05-05
    相关资源
    最近更新 更多