2021年3月7日星期日

celery Django: how to allow logging only when called by celery beat and not from django

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()  

someapp.tasks.py

@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

没有评论:

发表评论