You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:45:33