簡體   English   中英

Django:設置LOGGER不起作用

[英]Django: Setting LOGGER doesn't work

我在Django的記錄系統上遇到問題。 我的目標是將所有類型的日志記錄到文件中,並且僅在DEBUG設置為True (現在是正確的)時才記錄到控制台。

照原樣,日志文件保持空白(盡管它們是由Django創建的)。 當我啟動服務器(使用python3 manage.py runserver )時,在外殼中看到以下內容:

Warning!
Error!

... (normal server stuff)

但是沒有任何內容寫入任何日志文件。

如果我取消注釋__init__.py中的 logging.error('== == START LOGGER == ==')logr.setLevel('DEBUG') ,則外殼讀取:

ERROR:root:== == START LOGGER == ==
DEBUG:project:Debug!
INFO:project:Info!
WARNING:project:Warning!
ERROR:project:Error!

... (normal server stuff)

並且django.log顯示:

DEBUG (0.000) SET SQL_AUTO_IS_NULL = 0; args=None
DEBUG (0.000) SET SQL_AUTO_IS_NULL = 0; args=None
DEBUG (0.001) SHOW FULL TABLES; args=None
DEBUG (0.000) SELECT `django_migrations`.`app`, `django_migrations`.`name` FROM `django_migrations`; args=()

但是所有其他日志保持空白。

這是我的項目應用

__init__.py

import logging

#logging.error('== == START LOGGER == ==')
logr = logging.getLogger('project')
#logr.setLevel('DEBUG')

logr.debug('Debug!')
logr.info('Info!')
logr.warning('Warning!')
logr.error('Error!')

這是我的記錄設置

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
        'simpler': {
            'format': '%(message)s'
        },
    },
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {
        'default':{
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/err.log',
            'maxBytes': 5242880, # 5MB file size
            'encoding': 'utf-8',
            'backupCount': 5,
            'formatter': 'simple',
        },
        'debug':{
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/debug.log',
            'maxBytes': 5242880, # 5MB file size
            'encoding': 'utf-8',
            'backupCount': 5,
            'formatter': 'simple',
        },
        'django':{
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/django.log',
            'maxBytes': 5242880, # 5MB file size
            'encoding': 'utf-8',
            'backupCount': 5,
            'formatter': 'simple',
        },
        'mail':{
            'level': 'WARNING',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/mail.log',
            'maxBytes': 5242880, # 5MB file size
            'encoding': 'utf-8',
            'backupCount': 5,
            'formatter': 'simple',
        },
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'simpler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['django'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'django.db.backends': {
            'handlers': ['django'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'django.request': {
            'handlers': ['mail'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'project': {
            'handlers': ['default', 'debug', 'console'],
            'level': 'DEBUG',
            'propagate': False,
        },
    },
}

為什么在編寫logging.error('== == START LOGGER == ==')logr.setLevel('DEBUG')時顯示DEBUGINFO 為什么不將日志文件寫入? 我搜索了類似的問題及其答案達數小時之久沒有成功。 謝謝。

編輯:我嘗試過的事情:

'disable_existing_loggers'更改為False

'level': 'DEBUG',更改為'level': 'NOTSET',並將'level': 'ERROR',

刪除所有但不必要的設置

'propagate'更改為True

'handlers'刪除'console' (這絕對不起作用)

我沒有足夠的分數來添加評論,因此在這里我要提到,如果您的日志記錄格式使用%(name)s那么上述答案的一個有用擴展是在您擁有的文件中:

logr = logging.getLogger('project')

您可以使用:

logr = logging.getLogger('project.%s' % __name__)

然后,這意味着您的項目記錄器將報告完整的應用程序名稱,例如。 'project.polls.views'

您的__init__.py文件在settings.py之前被調用

將您的代碼從__init__.py移至其他任何文件,這些文件將在settings.py之后調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM