如何将 celery 所有日志发送到自定义处理程序。在我的例子中 python-logstash 处理程序
How to send celery all logs to a custom handler . in my case python-logstash handler
在我的 Celery 应用程序中,我在控制台上获得了 2 种类型的日志,即 Celery 应用程序日志和任务级别日志(在任务内部,我使用 logger.INFO(str) 语法进行日志记录)
我想将它们都发送到自定义处理程序(在我的例子中是 python-logstash 处理程序)
对于 django 日志我是成功的,通过在 settings.py 中设置处理程序和记录器但是我对芹菜无能为力
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 信号解决了问题
Celery 提供了一个 after_setup_logger 信号,在 Celery 设置记录器后触发。在其他几个参数中,信号传递记录器对象,您可以将自定义日志记录处理程序添加到该对象。
from celery import signals
import logstash
import logging
@signals.after_setup_logger.connect
def setup_logstash_logger(logger, *args, **kwargs):
handler = logstash.TCPLogstashHandler('localhost', 5959)
# More logger/handler configuration
# handler.setLevel(logging.ERROR)
# ...
logger.addHandler(handler)
微调 Celery 的记录器后,您可以简单地依靠它向 Logstash 发送应用消息,即使您需要发送自己的消息:
logger = logging.getLogger(__name__)
logger.info('My message') # This message will also be sent to Logstash
在我的 Celery 应用程序中,我在控制台上获得了 2 种类型的日志,即 Celery 应用程序日志和任务级别日志(在任务内部,我使用 logger.INFO(str) 语法进行日志记录)
我想将它们都发送到自定义处理程序(在我的例子中是 python-logstash 处理程序)
对于 django 日志我是成功的,通过在 settings.py 中设置处理程序和记录器但是我对芹菜无能为力
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 信号解决了问题
Celery 提供了一个 after_setup_logger 信号,在 Celery 设置记录器后触发。在其他几个参数中,信号传递记录器对象,您可以将自定义日志记录处理程序添加到该对象。
from celery import signals
import logstash
import logging
@signals.after_setup_logger.connect
def setup_logstash_logger(logger, *args, **kwargs):
handler = logstash.TCPLogstashHandler('localhost', 5959)
# More logger/handler configuration
# handler.setLevel(logging.ERROR)
# ...
logger.addHandler(handler)
微调 Celery 的记录器后,您可以简单地依靠它向 Logstash 发送应用消息,即使您需要发送自己的消息:
logger = logging.getLogger(__name__)
logger.info('My message') # This message will also be sent to Logstash