Django多应用日志隔离问题:日志混存至所有日志文件
Django 应用独立日志文件配置解决方案
你的问题出在两个核心点:
- 根日志器(
'')同时绑定了两个应用的日志handler,导致所有日志都会被这两个handler写入对应文件 - 代码里调用的是全局根日志器,没有使用应用专属的日志器
以下是具体修正步骤:
1. 修正 settings.py 中的 LOGGING 配置
移除根日志器对两个应用handler的绑定,为每个应用单独配置专属日志器,并关闭日志传播(propagate=False),避免日志流向上传递到其他父日志器:
LOG_DIR = BASE_DIR + '/application_logs/' LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 'datefmt': "%d/%b/%Y %H:%M:%S" }, }, 'handlers': { 'null': { 'level': 'DEBUG' if DEBUG else 'WARNING', 'class': 'logging.NullHandler', }, 'admin_management_handler': { 'level': 'DEBUG' if DEBUG else 'WARNING', 'class': 'logging.handlers.RotatingFileHandler', 'filename': LOG_DIR + "/admin_management.log", 'maxBytes': 1024 * 1024 * 10, # 最大10MB 'backupCount': 3, 'formatter': 'standard', }, 'change_management_handler': { 'level': 'DEBUG' if DEBUG else 'WARNING', 'class': 'logging.handlers.RotatingFileHandler', 'filename': LOG_DIR + "/change_management.log", 'maxBytes': 1024 * 1024 * 10, # 最大10MB 'backupCount': 3, 'formatter': 'standard', }, }, 'loggers': { 'django': { 'propagate': True, 'level': 'WARN', }, 'django.db.backends': { 'level': 'DEBUG' if DEBUG else 'WARNING', 'propagate': False, }, # admin_management 应用专属日志器 'src.admin_management': { 'handlers': ['admin_management_handler'], 'level': 'DEBUG', 'propagate': False, }, # change_management 应用专属日志器 'src.change_management': { 'handlers': ['change_management_handler'], 'level': 'DEBUG', 'propagate': False, }, # 根日志器仅绑定null handler,避免意外捕获全局日志 '': { 'handlers': ['null'], 'level': 'DEBUG', }, } }
2. 修改应用代码中的日志调用
在每个应用的代码文件(比如 views.py)中,获取对应应用名称的专属日志器,而非直接使用全局日志方法:
以 admin_management 应用的 views.py 为例:
import logging # 获取当前应用的专属日志器,名称与settings中配置的日志器名称一致 logger = logging.getLogger(__name__) logger.debug('test admin_management debug log') logger.error('test admin_management error log')
同理,change_management 应用的代码也需要做相同修改,使用 logging.getLogger(__name__) 获取自身应用的日志器。
修改完成后,每个应用的日志会仅写入对应的独立日志文件,不会互相干扰。
内容的提问来源于stack exchange,提问作者Sakeer
相关产品推荐
相关产品推荐

