Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:设置记录器不';行不通_Python_Django_Debugging_Logging_Console - Fatal编程技术网

Python Django:设置记录器不';行不通

Python Django:设置记录器不';行不通,python,django,debugging,logging,console,Python,Django,Debugging,Logging,Console,Django的记录系统有问题。我的目标是将所有类型的日志记录到文件中,并且仅当DEBUG设置为True时才记录到控制台(现在就是这样) 实际上,日志文件保持空白(尽管它们是由Django创建的)。当我启动服务器时(使用python3 manage.py runserver),我在shell中看到以下内容: Warning! Error! ... (normal server stuff) 但没有任何内容写入任何日志文件 如果我在\uu init\uuuuuuuupy中取消注释logging.

Django的记录系统有问题。我的目标是将所有类型的日志记录到文件中,并且仅当
DEBUG
设置为
True
时才记录到控制台(现在就是这样)

实际上,日志文件保持空白(尽管它们是由Django创建的)。当我启动服务器时(使用
python3 manage.py runserver
),我在shell中看到以下内容:

Warning!
Error!

... (normal server stuff)
但没有任何内容写入任何日志文件

如果我在\uu init\uuuuuuuupy中取消注释
logging.error('===START LOGGER====')
logr.setLevel('DEBUG')
,则shell读取:

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=()
但所有其他日志都保持空白

这是我的项目应用程序 \uuuu init\uuuuu.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!')
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,
        },
    },
}
这是我的日志设置 设置.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!')
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')时,它会显示
DEBUG
INFO
??为什么日志文件不被写入?我已经搜索了几个小时类似的问题和答案,但没有成功。谢谢

编辑:我尝试过的事情:

将“禁用现有记录器”更改为“错误”

'level':'DEBUG',
更改为
'level':'NOTSET',
'level':'ERROR',

删除除必要设置外的所有设置

“传播”
更改为
True


'handlers'
中删除
'console'
(它完全不起任何作用)

设置.py之前调用您的\uu init\uuuuuuuuuuuu.py文件


将代码从\uuu init\uuuuuuuuuuuuuuuupy移动到任何其他文件,该文件将在settings.py

之后调用\uuuu init\uuuuuuuuuuupy文件,然后调用settings.py


将您的代码从\uuu init\uuuuuuuuuuuupy移动到任何其他文件,这些文件将在settings.py之后调用,我没有足够的点数添加注释,因此我将在这里提到,如果您的日志记录格式使用
%(name)s
,那么上述答案的一个有用扩展是,在您拥有的文件中:

logr = logging.getLogger('project')
您可以使用:

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

这意味着您的项目记录器将报告完整的应用程序名称,例如“project.polls.views”

我没有足够的分数添加注释,因此我将在这里提到,如果您的日志记录格式使用
%(name)s
,则上述答案的有用扩展名是,在您拥有的文件中:

logr = logging.getLogger('project')
您可以使用:

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

这意味着您的项目记录器将报告完整的应用程序名称,例如“project.polls.views”

除了一些Django特定的项目外,
settings.LOGGING['loggers']
中唯一的条目是
project
。您的任何代码是否在除
project
以外的模块中?不,现在它是一个非常基本的django应用程序,只有一个模块(称为“project”),除了少数django特定的项目外,
设置中唯一的条目。日志记录['loggers']
project
。您的任何代码是否在
项目
以外的模块中?不,现在它是一个非常基本的django应用程序,只有一个模块(称为“项目”),这是完全正确的。非常感谢你!我刚刚将所有代码从_init_uuu.py移动到同一文件夹中的一个新的main.py(使用一个名为
start
)的函数),在url.py中调用它的方法是:from.main import start()`这完全正确。非常感谢你!我刚刚将所有代码从_init_uuu.py移动到同一文件夹中的一个新的main.py(使用名为
start
)的函数),通过以下方式在URL.py中调用它:from.main import start()`