import logging from celery import Celery from celery.signals import setup_logging from rag.settings import settings celery_app = Celery( "hr_ai_backend", broker=f"redis://{settings.redis_cache_url}:{settings.redis_cache_port}/{settings.redis_cache_db}", backend=f"redis://{settings.redis_cache_url}:{settings.redis_cache_port}/{settings.redis_cache_db}", include=["celery_worker.tasks", "celery_worker.interview_analysis_task"], ) celery_app.conf.update( task_serializer="json", accept_content=["json"], result_serializer="json", timezone="UTC", enable_utc=True, worker_log_format="[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", worker_task_log_format="[%(asctime)s: %(levelname)s/%(processName)s][%(task_name)s(%(task_id)s)] %(message)s", task_acks_late=True, worker_prefetch_multiplier=1, task_reject_on_worker_lost=True, result_extended=True, ) @setup_logging.connect def config_loggers(*args, **kwargs): """Configure logging for Celery worker""" logging.basicConfig( level=logging.INFO, format="[%(asctime)s: %(levelname)s/%(name)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) # Set specific log levels logging.getLogger("celery").setLevel(logging.INFO) logging.getLogger("celery.worker").setLevel(logging.INFO) logging.getLogger("celery.task").setLevel(logging.INFO)