adds celery logging rotation

This commit is contained in:
msramalho
2025-02-20 10:17:07 +00:00
parent 4383eb009e
commit b3de99aaa0
4 changed files with 35 additions and 3 deletions

View File

@@ -14,6 +14,7 @@ from app.shared.settings import get_settings
from app.shared.log import log_error
from app.shared.aa_utils import get_all_urls
from app.shared.db import worker_crud
from app.worker.worker_log import setup_celery_logger
settings = get_settings()
@@ -22,6 +23,8 @@ Redis = get_redis()
USER_GROUPS_FILENAME = settings.USER_GROUPS_FILENAME
setup_celery_logger(celery)
# TODO: these are temporary PATCHES for new aa's functionality
# logger.add("app/worker/worker_log.log", level="DEBUG")
logger.remove = lambda x: print(f"logger.remove({x})")

29
app/worker/worker_log.py Normal file
View File

@@ -0,0 +1,29 @@
from loguru import logger
from celery import Celery
import sys
from app.shared.task_messaging import get_celery
celery = get_celery("worker")
def setup_celery_logger(celery):
# Remove Celery's default handlers to prevent duplicate logs
celery_logger = celery.log.get_default_logger()
for handler in celery_logger.handlers[:]:
celery_logger.removeHandler(handler)
# Set up Loguru logging
logger.add("logs/celery_logs.log", retention="30 days", level="DEBUG")
logger.add("logs/celery_error_logs.log", retention="30 days", level="ERROR")
# Redirect Celery logs to Loguru
class InterceptHandler:
def write(self, message):
if message.strip():
logger.info(message.strip())
# Required to prevent issues with buffered output
def flush(self): pass
def isatty(self): return False
sys.stdout = InterceptHandler()
sys.stderr = InterceptHandler()

View File

@@ -15,8 +15,8 @@ services:
worker:
# command: watchmedo auto-restart --patterns="*.py" --recursive --ignore-directories -- celery -- --app=app.worker.main.celery worker --loglevel=debug --logfile=/aa-api/logs/celery.log -Q high_priority,low_priority --concurrency=${CONCURRENCY}
command: celery --app=app.worker.main.celery worker --loglevel=debug --logfile=/aa-api/logs/celery.log -Q high_priority,low_priority --concurrency=${CONCURRENCY}
# command: watchmedo auto-restart --patterns="*.py" --recursive --ignore-directories -- celery -- --app=app.worker.main.celery worker -Q high_priority,low_priority --concurrency=${CONCURRENCY}
command: celery --app=app.worker.main.celery worker -Q high_priority,low_priority --concurrency=${CONCURRENCY}
restart: "no"
env_file: .env.dev
volumes:

View File

@@ -34,7 +34,7 @@ services:
dockerfile: worker.Dockerfile
restart: always
env_file: .env.prod
command: celery --app=app.worker.main.celery worker --loglevel=warning --logfile=/aa-api/logs/celery.log -Q high_priority,low_priority --concurrency=${CONCURRENCY}
command: celery --app=app.worker.main.celery worker -Q high_priority,low_priority --concurrency=${CONCURRENCY}
volumes:
- ./logs:/aa-api/logs
- ./database:/aa-api/database