Python 芹菜日志

Python 芹菜日志,python,rabbitmq,celery,Python,Rabbitmq,Celery,我正在设计一个通过RabbitMQ进行日志记录(并最终写入数据库)的系统。我发现该库有一个MessageQueueHandler(和RabbitMQHandler),它将python日志写入消息队列。这似乎很有效。但是,当我尝试使用芹菜工作者和相关任务来消化这些消息时,我收到一条未知消息警告,然后它会在不阅读的情况下删除该消息: [2015-06-16 15:59:06,688: WARNING/MainProcess] Received and deleted unknown message.

我正在设计一个通过RabbitMQ进行日志记录(并最终写入数据库)的系统。我发现该库有一个MessageQueueHandler(和RabbitMQHandler),它将python日志写入消息队列。这似乎很有效。但是,当我尝试使用芹菜工作者和相关任务来消化这些消息时,我收到一条未知消息警告,然后它会在不阅读的情况下删除该消息:

[2015-06-16 15:59:06,688: WARNING/MainProcess] Received and deleted unknown message. Wrong destination?!?
邮件正文的全部内容为:

body: {u'thread_name': u'MainThread', u'extra': {}, u'process': 11784, u'module': u'__main__', u'heavy_init
ialized': True, u'information_pulled': True, u'exception_message': None, u'message': u'test', u'exception_name': None, u'frame_correction': 0, u'filen
ame': u'<input>', u'lineno': 2, u'kwargs': {}, u'msg': u'test', u'channel': u'__main__', u'args': [], u'func_name': u'<module>', u'process_name': u'Ma
inProcess', u'formatted_exception': None, u'thread': 12904, u'level': 2, u'greenlet': 12904, u'time': u'2015-06-16T15:59:06.989000Z'} (502b)
{content_type:u'application/json' content_encoding:u'utf-8'
  delivery_info:{'consumer_tag': u'5', 'redelivered': False, 'routing_key': u'logging', 'delivery_tag': 1, 'exchange': u'logging'} headers={}}
运行worker的芹菜命令如下所示:

celery -A proj.tasks worker --loglevel=debug -Q logging

您已将芹菜配置为侦听日志消息发送到的队列。芹菜期望它们是内部格式的任务消息(即指定要运行的任务)

解决方案是为芹菜和日志设置单独的队列。我建议对芹菜使用默认队列,即按如下方式启动工人:

celery -A proj.tasks worker -Q celery

然后您的芹菜任务必须从
日志记录
队列中读取-在任务中,您需要使用一个可用的库(
librabbitmq
amqp
puka
…)从日志记录队列读取日志信息。

您已将芹菜配置为侦听日志信息发送到的队列。芹菜期望它们是内部格式的任务消息(即指定要运行的任务)

解决方案是为芹菜和日志设置单独的队列。我建议对芹菜使用默认队列,即按如下方式启动工人:

celery -A proj.tasks worker -Q celery

然后你的芹菜任务必须从
日志记录
队列中读取信息-在任务中,你需要使用一个可用的库(
librabbitmq
amqp
puka
)来读取
日志记录
队列中的日志信息。

为此,我用Kombu而不是芹菜编写了一个工作人员,因为使用Kombu库,编写消息的代码不一定是侦听消息的代码(换句话说,消息队列的两侧不必有相同的代码)。因此,最终没有一个真正好的方法来使用芹菜来实现这一点。

我最终用Kombu而不是芹菜来编写了一个工作人员,因为有了Kombu库,编写消息的代码也不一定是侦听消息的代码(换句话说,消息队列的两侧不必有相同的代码)。因此,最终使用芹菜并不是一个很好的方法。

看起来您正在将日志消息放在芹菜队列上-正确吗?您可以发布消耗日志消息的芹菜任务吗?请参阅上面的附加编辑。看起来您正在将日志消息放在芹菜队列上-正确吗?您可以发布日志消息吗使用日志消息的芹菜任务?请参阅上面的附加编辑看起来您正在将日志消息放在芹菜队列上-是否正确?是否可以发布使用日志消息的芹菜任务?请参阅上面的附加编辑