首页 > 其他 > 详细

Celery Worker log 中记录 task_id

时间:2020-11-18 11:45:57      阅读:80      评论:0      收藏:0      [点我收藏+]
import inspect
import logging
import threading
from logging import Logger as Logger, LogRecord

from celery import Celery
from celery.signals import task_prerun, task_postrun

local = threading.local()
local.task_id = ""


class MyLogger(Logger):
    def makeRecord(self, *args, **kwargs) -> LogRecord:
        rv = super().makeRecord(*args, **kwargs)
        rv.task_id = local.task_id
        return rv


logging.Logger.manager.loggerClass = MyLogger

app = Celery()
app.conf.update(
    CELERYD_LOG_FORMAT="[%(asctime)s: %(levelname)s/%(processName)s %(task_id)s %(filename)s:%(lineno)d ] %(message)s"
)


@task_prerun.connect
def set_task_id(task_id, task, *args, **kwargs):
    local.task_id = task_id


@task_postrun.connect
def rm_task_id(task_id, task, *args, **kwargs):
    local.task_id = ""


@app.task
def add(x, y):
    stack = inspect.stack()
    f_locals = stack[1].frame.f_locals
    print(f{getattr(f_locals.get("req", object()), "id", "noid")})
    return x + y


if __name__ == __main__:
    app.worker_main()

 

Celery Worker log 中记录 task_id

原文:https://www.cnblogs.com/ywhyme/p/13998682.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!