python - 如何将 celery 所有日志发送到自定义处理程序。在我的例子中是 python-logstash 处理程序

标签 python logging logstash django-celery celery-task

在我的 Celery 应用程序中,我在控制台上获得了 2 种类型的日志,即 Celery 应用程序日志和任务级别日志(在任务中我使用 logger.INFO(str) 语法进行日志记录)

我想将它们都发送到自定义处理程序(在我的例子中是 python-logstash 处理程序)

对于 django 日志我是成功的,通过在 settings.py 中设置处理程序和记录器但是我对 celery 无能为力

最佳答案

def initialize_logstash(logger=None,loglevel=logging.DEBUG, **kwargs):
    # logger = logging.getLogger('celery')
    handler = logstash.TCPLogstashHandler('localhost', 5959,tags=['worker'])
    handler.setLevel(loglevel)
    logger.addHandler(handler)
    # logger.setLevel(logging.DEBUG)
    return logger

from celery.signals import after_setup_task_logger
after_setup_task_logger.connect(initialize_logstash)
from celery.signals import after_setup_logger
after_setup_logger.connect(initialize_logstash)

同时使用 after_setup_task_logger 和 after_setup_logger 信号解决了问题

关于python - 如何将 celery 所有日志发送到自定义处理程序。在我的例子中是 python-logstash 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39265344/

相关文章:

python - 带有大文件的 Amazon s3 上的 dask read_csv 超时

Python:如何在单元测试期间覆盖复杂的函数?

java - 如何记录 Spring RuntimeException

logstash grok TIMESTAMP_ISO8601 类型?

python - 在 logstash 中编写脚本

logstash - 消除Logstash中的顶级字段

python - 是否有将 matplotlib 的有状态 pyplot API 映射到面向对象的等效项的文档?

python - 正则表达式匹配Python

java - 如何停止Spring的默认输出?

logging - 路由器 (RTR) 日志的消息格式?