我已将以下日志记录配置添加到我的 Django 应用程序的 settings.py
文件:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}
现在,我只想在
views.py
中的一个 View 中添加一些自定义日志记录。 ,但似乎记录器是 NOTSET
,这意味着只有 warning
的级别和更高的记录:import logging
from django.http import JsonResponse
logger = logging.getLogger(__name__)
def testing(request):
logger.info("Doesn't show...")
logger.warning(f"Log Level: {logger.level} = {logging.getLevelName(logger.level)}")
return JsonResponse({"Hello": "World"})
上面的代码片段记录了以下内容:
Log Level: 0 = NOTSET
难道我做错了什么?为什么没有设置记录器的级别(即使我在
settings.py
中明确设置了它)?
最佳答案
为什么会有这种行为?
logging.getLogger(__name__)
语句将使用 初始化一个 python 记录器当前模块的虚线路径 .在您的情况下,它将是 my_app.views
. Django 无法理解您从 创建的日志。 views.py
由于您的记录器名称 my_app.views
未在 中列出settings.py
.如果没有指定 ,Django 不会对日志做任何事情。记录器名称/记录器名称模式 因此。
如何warning
显示日志?
我希望这个所以发布这个解释很好,Python logging not outputting anything
解决方案
选项1
更改您的记录器名称 在 settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'my_app.views': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
},
}
关键变更:我已更改记录器名称
django
至 my_app.views
选项 2
指定 记录器名称 在
getLogger
方法logger = logging.getLogger('django')
重点:记录器的名称和在 Django 设置模块中定义的记录器应该相同。
关于django - 在 Django 中添加自定义日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254843/