如何使用 Django 正确配置 Celery 日志记录功能?
How to properly configure Celery logging functionality with Django?
我使用 Django 和 Celery 来安排任务,但我遇到了记录器的问题,因为它无法正确传播。正如您在下面的代码中看到的,我已经配置了 Python logging
模块和 get_task_logger
Celery 模块。
import logging
from celery import Celery
from celery.utils.log import get_task_logger
# Configure logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
# Create Celery application and Celery logger
app = Celery('capital')
logger = get_task_logger(__name__)
@app.task()
def candle_updated(d, f):
logging.warning('This is a log')
logger.info('This is another log')
return d+f
我使用 django-celery-beat
扩展来设置来自 Django 管理员的定期任务。该模块将计划存储在 Django 数据库中,并提供一个方便的管理界面来管理 运行 时间的周期性任务。
按照建议in the documentation 我以这种方式启动工作程序和调度程序:
$ celery -A capital beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
celery beat v4.4.0 (cliffs) is starting.
__ - ... __ - _
LocalTime -> 2020-04-02 22:33:32
Configuration ->
. broker -> redis://localhost:6379//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 seconds (5s)
[2020-04-02 22:33:32,630: INFO/MainProcess] beat: Starting...
[2020-04-02 22:33:32,631: INFO/MainProcess] Writing entries...
[2020-04-02 22:33:32,710: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
[2020-04-02 22:33:32,729: INFO/MainProcess] Writing entries...
[2020-04-02 22:33:38,726: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
[2020-04-02 22:33:44,751: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
一切似乎 运行 都很好。控制台每 6 秒输出一次(周期性任务的频率),所以任务似乎是在后台执行的,但我无法检查它。我遇到的问题是文件 example.log 是空的,可能是什么原因?
你也启动了worker节点了吗? beat 只是调度程序,你还必须 运行 一个工人
celery -A capital worker -l info
我使用 Django 和 Celery 来安排任务,但我遇到了记录器的问题,因为它无法正确传播。正如您在下面的代码中看到的,我已经配置了 Python logging
模块和 get_task_logger
Celery 模块。
import logging
from celery import Celery
from celery.utils.log import get_task_logger
# Configure logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
# Create Celery application and Celery logger
app = Celery('capital')
logger = get_task_logger(__name__)
@app.task()
def candle_updated(d, f):
logging.warning('This is a log')
logger.info('This is another log')
return d+f
我使用 django-celery-beat
扩展来设置来自 Django 管理员的定期任务。该模块将计划存储在 Django 数据库中,并提供一个方便的管理界面来管理 运行 时间的周期性任务。
按照建议in the documentation 我以这种方式启动工作程序和调度程序:
$ celery -A capital beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
celery beat v4.4.0 (cliffs) is starting.
__ - ... __ - _
LocalTime -> 2020-04-02 22:33:32
Configuration ->
. broker -> redis://localhost:6379//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 seconds (5s)
[2020-04-02 22:33:32,630: INFO/MainProcess] beat: Starting...
[2020-04-02 22:33:32,631: INFO/MainProcess] Writing entries...
[2020-04-02 22:33:32,710: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
[2020-04-02 22:33:32,729: INFO/MainProcess] Writing entries...
[2020-04-02 22:33:38,726: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
[2020-04-02 22:33:44,751: INFO/MainProcess] Scheduler: Sending due task Candles update (marketsdata.tasks.candle_updated)
一切似乎 运行 都很好。控制台每 6 秒输出一次(周期性任务的频率),所以任务似乎是在后台执行的,但我无法检查它。我遇到的问题是文件 example.log 是空的,可能是什么原因?
你也启动了worker节点了吗? beat 只是调度程序,你还必须 运行 一个工人
celery -A capital worker -l info