我不知道为什么django没有记录任何小于"警告";数量我有这个代码在视图中:
logger = logging.getLogger(__name__)
def profile_data(request):
logging.info("INFO PROFILE DATA!!")
logging.debug("DEBUG PROFILE DATA!!")
logging.warning("WARNING PROFILE DATA!!")
logging.error("ERROR PROFILE DATA!!")
在我的设置中。py:
# Logging
LOGGING = {
'version': 1,
# Version of logging
'disable_existing_loggers': False,
'filters': {
# information regarding filters
},
'formatters': {
'<simple_format>': {
'format': '{levelname} {message}',
'style': '{',
}
},
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': '/logs/log_file1.log',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler'
},
},
'loggers': {
'django': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
},
'root': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
}
}
}
正如你所看到的,我试图将一切设置为DEBUG级别,但它不起作用,我只看到这是终端中的警告和错误级别:
WARNING:root:WARNING PROFILE DATA!!
ERROR:root:ERROR PROFILE DATA!!
编辑
将记录器声明更改为:
logger = logging.getLogger('app_logger')
呼叫:
logger.info("INFO PROFILE DATA!!")
以及新名称的设置,当然:
'loggers': {
'app_logger': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
},
但它仍然只打印警告及以上内容。我什么时候申报新的记录器?logging.getLogger()
不应该在设置中声明记录器吗?我应该如何在我的视图中导入该记录器?
此外,根据下面的答案('app_logger': {"level": "DEBUG", "handler": "console"},
(的建议,尝试将记录器添加到dict密钥的顶层,但没有成功。
您用构建了一个新的记录器
logger = logging.getLogger(__name__)
__name__
有价值[geeksfogeeks.org/
如果源文件作为主程序执行,解释器会将
__name__
变量设置为具有值"__main__"
。如果该文件是从另一个模块导入的,则__name__
将被设置为模块名称。
因此,您将构造一个名为__main__
的记录器,或者一个名模块的记录器。但这些不是您在settings.py
中定义的记录器,这是一个新的记录器。
另一个问题是:您不使用记录器,而是使用logging
,因此";根";记录器,因此您应该替换:
logging.info('INFO PROFILE DATA!!')
带有:
logger.info('INFO PROFILE DATA!!')
例如,我们可以使用带有以下的root
记录器
import logging
logger = logging.getLogger('root')
def profile_data(request):
logger.info('INFO PROFILE DATA!!')
logger.debug('DEBUG PROFILE DATA!!')
logger.warning('WARNING PROFILE DATA!!')
logger.error('ERROR PROFILE DATA!!')
因此以下配置:
LOGGING = {
"version": 1,
"root": {"level": "DEBUG", "handlers": ["console"]},
"loggers": {"oldname": {"level": "WARNING", "handlers": ["console"],}},
"handlers": {
"console": {"class": "logging.StreamHandler", "stream": "ext://sys.stdout"}
},
}
收益率:
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import logging
In [2]: logging.warning("open stdout")
WARNING:root:open stdout
In [3]: root = logging.getLogger(None)
In [4]: old = logging.getLogger("oldname")
In [5]: new = logging.getLogger("newname")
In [6]: print(root.level, old.level, new.level)
10 30 0
In [7]: root.debug("test")
DEBUG:root:test
In [8]: old.debug("test")
In [9]: new.debug("test")
DEBUG:newname:test
所以移动你的";根";"从内部按键";记录器";到LOGGING dict的顶层,解决您的问题。
注意:;根";在顶级是保留名称以配置根记录器,在顶级具有任何其他名称的密钥都不起作用。由于未定义的记录器从根目录继承设置,您的未定义记录器将工作。
使用定义的记录器
有其他东西干扰了您的配置。把你的配置减少到只有这个,然后开始一个接一个地添加东西,直到它坏掉。
LOGGING = {
"version": 1,
"loggers": {"app_logger": {"level": "DEBUG", "handlers": ["console",]}},
"handlers": {"console": {"class": "logging.StreamHandler",}},
}
此外,它存在于django项目的settings.py
中,并且只有当您通过python manage.py shell
打开django shell时,它才适用。仅仅在标准解释器中使用它不会加载配置(只是为了涵盖基本内容(。