我遇到了一种情况。我有一个芹菜任务,它使用python记录器来登录到日志文件。然而,当我运行芹菜工人时,我可以在屏幕上看到日志消息。它被写入日志文件,但我的屏幕上也有很多消息。
当我把芹菜放在监督室时,问题就出现了。我已经设置了std_out路径和std_err路径,但所有工作日志消息都被写入std_err日志文件,而不是std_out日志文件。通过这种方式,我无法在std_err中获得真正的错误消息,加上日志消息是多余的,因为它无论如何都会被写入应用程序日志文件。
我尝试在启动芹菜工作程序时设置日志级别,但似乎没有什么能阻止工作程序将日志消息刷新到屏幕上,当在supervisord中运行时,日志消息会被写入std_err。
这是我的主管文件
[program:celery_worker]
command=celery -A CeleryWorker worker --concurrency=4 -l error
directory=/home/swaroop/codebase/src
stdout_logfile=/home/swaroop/codebase/logs/clLogger.log
stderr_logfile=/home/swaroop/codebase/logs/clerrorLogger.log
autostart=true
autorestart=true
有人能解决这个问题吗?任何将实际的芹菜错误消息与应用程序日志消息分离的技术都会有所帮助。
除非您指定了一个芹菜工作者日志文件,否则它将记录到stderr
。因此,使用-f LOGFILE
,以避免登录到屏幕。
例如:
$celery -A proj worker -f proj.log -l ERROR
如果您使用自己的记录器处理所有Celery日志消息,但希望启动错误消息转到特定的日志,我会这样做:
celery worker --app proj --logfile=/dev/null
这将停止所有进入标准输出的消息