Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于已执行任务队列拆分芹菜日志_Python_Logging_Filter_Celery_Kibana - Fatal编程技术网

Python 基于已执行任务队列拆分芹菜日志

Python 基于已执行任务队列拆分芹菜日志,python,logging,filter,celery,kibana,Python,Logging,Filter,Celery,Kibana,问题如下: 我在芹菜中设置了两个队列,Q1和Q2,并用下面的代码启动了芹菜应用程序 python -m celery --loglevel=INFO --no-color --app=myapp.tasks.capp -Q Q1,Q2 worker -c 10 我目前使用pygelf通过UDP将所有日志发送到kibana。我想根据消息在其中执行的队列分割消息,以便为它们分配特定的存储标记 目前我做的事情如下: capp = celery.Celery('myapp', broker=redis

问题如下:

我在芹菜中设置了两个队列,Q1和Q2,并用下面的代码启动了芹菜应用程序

python -m celery --loglevel=INFO --no-color --app=myapp.tasks.capp -Q Q1,Q2 worker -c 10
我目前使用pygelf通过UDP将所有日志发送到kibana。我想根据消息在其中执行的队列分割消息,以便为它们分配特定的存储标记

目前我做的事情如下:

capp = celery.Celery('myapp', broker=redis_broker, backend=config.celery.get('broker'))

class RootContextFilter(logging.Filter):
    def filter(self, record):
        if capp.current_task.queue == 'Q1':
            record.tag = tag_for_Q1
        elif capp.current_task.queue == 'Q2':
            record.tag = tag_for_Q2
        return True


@setup_logging.connect
def setup_loggers(loglevel, logfile, format, colorize, **kwargs):
    root_logger = logging.getLogger()
    root_logger.setLevel(loglevel)
    log_handler = GelfUdpHandler(host='my_logstash', port=port, include_extra_fields=True)
    log_handler.addFilter(RootContextFilter())
    root_logger.addHandler(log_handler)
虽然我希望每个日志都指向kibana中分配的标记,但是日志最终显示在两个标记中

是否有我遗漏的东西,是否有方法确保日志不会复制到两个标记