I am using
celery - 5.0.5 (singularity) django version 3.1.7 python 3.7.9 I have an important task which runs every hour using celery in Django
Folder Structure:
--src -- project -- __init__.py -- settings.py -- celeryapp.py -- someapp -- tasks.py -- LOGS -- hourly_task <-- want to store the logs from task_every_1_hour only when called using celery -- timestamp.log <--- the timestamp will be time of the log file when created. __init__.py
from .celeryapp import app as celery_app __all__ = ['celery_app'] celeryapp.py
import os from celery import Celery import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') #This defines the celery app instance redis = 'redis://:passws@localhost:6379/0' app = Celery(dirname, broker=redis, backend=redis ) # list all the repeated tasks app.conf.beat_schedule = { "task_very_1_hour": { "task": "someapp.tasks.runEveryOneHour", "schedule": 3600.0 } } app.autodiscover_tasks() @celery_app.task def runEveryOneHour(): some code here I want to log with timestamp as filename. For that generally i do is
def create_logger(): logger = logging.getLogger('runEveryOneHour') logger.setLevel(logging.INFO) dir = /full-path-to/LOGS/hourly_task current_time = datetime.datetime.now().strftime("%Y-%m-%dT%H__%M__%S") file1 = current_time+".log" filename1 = os.path.join(dir,file1) handler = logging.FileHandler(filename1,mode='w') logger.addHandler(handler) @celery_app.task def runEveryOneHour(): create_logger() logger = logging.getLogger('runEveryOneHour') logging.info("Task Started) some code here logging.info("Task Ended) So will this work whenever runEveryOneHour runs every one hour
but i use this function many places, in my django views whenever required.
So then i dont want it to do the logging.
https://stackoverflow.com/questions/66523983/celery-django-how-to-allow-logging-only-when-called-by-celery-beat-and-not-from March 08, 2021 at 11:33AM
没有评论:
发表评论