zoukankan      html  css  js  c++  java
  • Celery Worker log 中记录 task_id

    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()
  • 相关阅读:
    表值函数,标量值函数
    考勤率
    精确小数点
    SQL 返回刚插入的值
    xml读取
    备份表
    case,cast
    DDR基础知识
    NXP官方的I.MX6UL板级Uboot源码适配
    高通msm8909打开debug串口
  • 原文地址:https://www.cnblogs.com/twotigers/p/13998682.html
Copyright © 2011-2022 走看看