celery Django:如何仅在被 celery beat 调用而不是从 django 调用时才允许记录

问题描述

我正在使用

celery - 5.0.5 (singularity)
django version 3.1.7
python 3.7.9

我有一个重要的任务,它每小时在 Django 中使用 celery 运行

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

我想用时间戳作为文件登录。为此,我通常做的是

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)

每当 runEveryOneHour 每小时运行一次时,此方法是否有效

但我在很多地方使用这个功能,在我的 django 视图中需要时。

所以我不想让它做日志记录。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...