django 工程日志配置

本文详细介绍了如何在Django项目中配置日志系统,包括将不同级别的日志信息输出到控制台及特定文件中,并实现日志文件的滚动覆盖机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知乎大佬描述
本人是设置的在console中输出所有日志信息
在error.log文件中只记录报错
在default 文件中记录所有日志
并且都是在五个日志文件后,从第一个文件开始覆盖数据


LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用已经存在的日志器
    'formatters': {
        'standard': {  # 日志格式
            'format': '%(asctime)s [%(module)s:%(funcName)s] '
                      '[%(levelname)s]- %(message)s'},
        },

    'filters': {  # 对日志进行过滤
        'require_debug_false': {  # django在非debug模式下输出日志
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {   # django在debug模式下输出日志
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {  # 日志处理方法
        'console': {  # 向终端中输出日志
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'error': {  # 向文件中输出日志
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(os.path.dirname(BASE_DIR), 'test1/logs/qilunji_err.log'),  # 日志文件位置
            'formatter': 'standard',
            'maxBytes': 1024*30*1024,  # 日志文件大小30M
            'backupCount': 5,    # 超过五个文件从第一个开始覆盖
            'encoding': 'utf-8',
        },
        'default': {  # 向文件中输出日志
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(os.path.dirname(BASE_DIR), 'test1/logs/qilunji_default.log'),  # 日志文件位置
            'formatter': 'standard',
            'maxBytes': 1024*30*1024,  # 日志文件大小30M
            'encoding': 'utf-8',
        },
        # 'sentry': {
        #     'level': 'ERROR',
        #     'filters': ['require_debug_false'],
        #     'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler'
        # },

    },
    'loggers': {  # 日志器
        'django': {  # 定义了一个叫django的日志器
            'handlers': ['console', 'error', 'default'],  # 可以同时向终端文件中输入日志
            'level': 'INFO',  # 日志器接收的最低日志级别
            'propagate': True,  # 是否让日志信息继续冒泡给其他的日志处理系统
        },
    },
}

### Django 配置文件管理系统实现方案与最佳实践 Django配置文件管理可以通过多种方式进行优化,以满足不同的项目需求和复杂度。以下是关于如何在 Django 中实现配置文件管理和推荐的最佳实践。 #### 1. 使用 `settings.py` 文件分环境配置 Django 默认的配置文件是 `settings.py`,但随着项目的扩展,建议将其拆分为多个子模块,按环境区分(如开发、测试、生产)。这种方法能够提高可维护性和灵活性[^1]。 ```python # settings/base.py (公共配置) import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = 'your-secret-key' INSTALLED_APPS = [ # ... ] # settings/development.py (开发环境配置) from .base import * DEBUG = True DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } # settings/production.py (生产环境配置) from .base import * DEBUG = False ALLOWED_HOSTS = ['yourdomain.com'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'prod_db', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } ``` 通过这种方式,可以在启动时加载特定的配置文件: ```bash export DJANGO_SETTINGS_MODULE=project.settings.production python manage.py runserver ``` #### 2. 利用 djblets.siteconfig 扩展配置能力 对于更复杂的场景,可以引入第三方库 `djblets.siteconfig` 来增强配置系统的功能。该库允许通过管理界面动态修改配置项,并支持多种数据类型的存储[^2]。 - **优点**: 提供了一个图形化的管理后台,简化了管理员的操作流程。 - **缺点**: 可能增加一定的学习成本和技术栈复杂度。 #### 3. 处理敏感信息的安全策略 为了避免将敏感信息(如 API 密钥、数据库密码)暴露于版本控制系统中,应采用环境变量或专用密钥管理工具[^3]。 ##### 方法一:使用 `.env` 文件配合 `python-decouple` `.env` 文件是一种常见的做法,用于保存敏感信息并隔离它们与代码逻辑的关系。 ```ini # .env SECRET_KEY=my_secret_key DB_NAME=dev_database DB_USER=root DB_PASSWORD=password ``` 然后,在 `settings.py` 中读取这些值: ```python from decouple import config SECRET_KEY = config('SECRET_KEY') DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': config('DB_NAME'), 'USER': config('DB_USER'), 'PASSWORD': config('DB_PASSWORD'), 'HOST': 'localhost', 'PORT': '', } } ``` ##### 方法二:AWS Secrets Manager 或 HashiCorp Vault 对于大型企业级应用,可以选择专业的密钥管理服务来保护敏感数据。 #### 4. 自动化部署中的配置同步 当使用 Docker 容器化部署时,可以通过挂载卷的方式共享主机上的配置文件至容器内部[^4]。这样既保持了配置的一致性,又减少了重复工作量。 ```dockerfile # Dockerfile 示例 COPY ./settings /app/settings/ ENV DJANGO_SETTINGS_MODULE=settings.production CMD ["gunicorn", "-c", "gunicorn.conf.py", "--bind", ":8000", "myproject.wsgi"] ``` #### 5. 工程结构设计考虑 合理的工程目录布局有助于清晰地区分各类资源的位置及其用途[^5]。例如,将日志、静态文件、媒体文件分开存放,便于后续运维操作。 --- ### 总结 综上所述,Django 配置文件管理的核心在于分离不同环境下的参数设定,同时注重安全性与易用性的平衡。上述方法涵盖了从小型个人项目到大规模团队协作的不同应用场景。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值