Django项目中logger.info()信息未显示在日志文件问题
Django自定义logger.info日志不写入文件问题定位
问题复现代码
views.py
from django.shortcuts import render from django.http import HttpResponse # Create your views here. import logging, traceback logger = logging.getLogger('django') def home(request): logger.info('Some Message') return render(request, 'home.html')
settings.py 日志配置
import os LOGGING ={ 'version':1, 'loggers':{ 'django':{ 'handlers':['file'], 'level':'DEBUG' } }, 'handlers':{ 'file':{ 'level':'INFO', 'class':'logging.FileHandler', 'filename':'./logs/debug3.log', 'formatter':'simple' } }, 'formatters':{ 'simple':{ 'format':'{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style':'{', } } }
故障根因
问题由两个配置错误共同导致:
- 缺失
disable_existing_loggers: False配置:Django基于Python logging的dictConfig加载日志规则,该参数默认值为True,会禁用所有配置加载前已初始化的logger,绑定到djangologger上的文件handler无法正常接收业务侧写入的日志条目。 - 错误复用框架内置logger:
django前缀的logger为Django框架内部预留,有默认的日志过滤规则,业务代码直接写入的日志会被框架过滤逻辑拦截,不会正常落盘。
修复步骤
- 修改settings.py中的LOGGING配置,补充必填参数,新增业务专属logger,同时将日志路径改为基于BASE_DIR的绝对路径,避免工作目录变化导致日志写入位置异常:
import os from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent LOGGING ={ 'version':1, 'disable_existing_loggers': False, # 关闭默认的已有logger禁用逻辑 'loggers':{ 'django':{ 'handlers':['file'], 'level':'DEBUG', 'propagate': True }, # 业务自定义logger,名称可根据自身app名调整 'my_app':{ 'handlers':['file'], 'level':'INFO', 'propagate': False } }, 'handlers':{ 'file':{ 'level':'INFO', 'class':'logging.FileHandler', # 改用绝对路径 'filename': os.path.join(BASE_DIR, 'logs/debug3.log'), 'formatter':'simple' } }, 'formatters':{ 'simple':{ 'format':'{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style':'{', } } }
- 修改views.py中logger的初始化逻辑,使用自定义命名的业务logger替代框架内置的
djangologger:
from django.shortcuts import render from django.http import HttpResponse import logging # logger名称和配置中自定义的logger名保持一致 logger = logging.getLogger('my_app') def home(request): logger.info('Some Message') return render(request, 'home.html')
前置校验:确认项目根目录下
logs文件夹存在,且Django运行进程对该文件夹有读写权限,否则会触发文件写入权限错误。
内容的提问来源于stack exchange,提问作者Muhammad Usama
相关产品推荐
相关产品推荐

