Как настроить логирование Django + Celery с помощью RotatingFileHandler?

Настройка логирования Django и Celery с помощью модуля RotatingFileHandler включает несколько шагов. Вот подробный шаг за шагом инструкция:

Шаг 1: Установка необходимых модулей
Убедитесь, что у вас установлены следующие модули:
- Django: pip install Django
- Celery: pip install Celery

Шаг 2: Создание конфигурации логирования в Django
Откройте файл settings.py в корневой директории вашего проекта Django и добавьте следующий код:

import logging
import os

# Определяем путь к файлу лога
LOGS_DIR = os.path.join(BASE_DIR, 'logs')
os.makedirs(LOGS_DIR, exist_ok=True)
LOG_FILE = os.path.join(LOGS_DIR, 'django.log')

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': LOG_FILE,
            'maxBytes': 1024 * 1024 * 5,  # 5 MB
            'backupCount': 5,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['default'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

В этом коде мы определяем путь к файлу лога (django.log), максимальный размер файла в байтах (5 MB) и количество резервных копий (5).

Шаг 3: Настройка логирования в Celery
Откройте файл celery.py (или tasks.py, если у вас весь код Celery в tasks.py) и добавьте следующий код:

import logging
from celery import Celery

app = Celery('mycelery',
             broker_url='your_broker_url',
             include=['mycelery.tasks'])

# Логирование в Celery
app.log.setup(logfile='celery.log',
              format='%(asctime)s [%(levelname)s] %(message)s',
              level=logging.DEBUG)

В этом коде мы настраиваем логирование в Celery, указывая путь к файлу лога (celery.log), формат записи лога и уровень логирования (DEBUG).

Шаг 4: Добавление логирования в код Django и Celery
Теперь вы можете добавить логирование в свой код Django и Celery, используя стандартный модуль Python для логирования. Например, в вашем коде Django вы можете добавить следующий код, чтобы зарегистрировать информацию в журнале:

import logging

logger = logging.getLogger(__name__)

def my_view(request):
    logger.info('This is an info message.')

В коде Celery вы можете добавить логирование аналогичным образом:

import logging
from mycelery import app

logger = logging.getLogger(__name__)

@app.task
def my_task():
    logger.info('This is an info message.')

Шаг 5: Просмотр логов
Теперь, когда вы всё настроили, логи будут записываться в файлы django.log и celery.log. Вы можете найти эти файлы в папке logs в корневой директории вашего проекта Django.

Конфигурация RotatingFileHandler позволяет автоматически создавать новые файлы, когда текущий файл достигает заданного размера, и хранить ограниченное количество резервных копий для архивирования. Это обеспечивает хранение истории логов и предотвращает их переполнение.

Надеюсь, этот подробный ответ помог вам настроить логирование Django и Celery с использованием RotatingFileHandler. Если у вас возникли дополнительные вопросы, пожалуйста, сообщите мне.