gpt4 book ai didi

python - Celery Python 日志记录配置仅从指定模块记录 DEBUG

转载 作者:行者123 更新时间:2023-11-30 23:36:09 26 4
gpt4 key购买 nike

我正在尝试让 django celery 记录(到控制台)来 self 的模块(而不是库的模块)的 DEBUG(及更高版本)事件。所以启动 celeryd 是:

python hack/manage.py celeryd -E -l DEBUG -c 2

意味着所有 DEBUG 事件都会传递到控制台(这是我的根记录器上的处理程序)。我想修改此行为以便:

  • 来自 mymodule(和子模块)的 DEBUG 事件转到控制台
  • 来自所有其他模块的 DEBUG 事件将被忽略(例如:转到 Null 处理程序)
  • 所有其他事件均按正常方式处理(例如:错误继续转到邮件处理程序)

最好的方法是什么?

最佳答案

我遇到了这个问题,并且没有一个“最佳”方法可以做到这一点。记住一些事情很重要。

  • Celery 在生产环境中作为单独的可执行文件运行。这看起来很明显,但这意味着与其他东西(如 django)共享日志文件不会很好地工作(参见 CELERYD_HIJACK_ROOT_LOGGER ),所以不要这样做..
  • 在生产环境和开发环境中保持事物以类似的方式运行非常重要,这样当您转向生产时就不会出现问题(请参阅 CELERY_ALWAYS_EAGER 并使用它)
  • 如果您使用设置,从manage.py运行时Celery将引用您的settings.py文件进行配置

考虑到这一点,我建议您如何设置日志记录以满足您的需求。首先确保您正确设置了模块的日志记录级别。看我的other post关于如何设置日志记录。这是满足您需求的精简版本

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'()': 'logutils.colorize.ColorizingStreamHandler',
'formatter': 'standard',
'stream': sys.stdout
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},

},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'propagate': True,
'level': 'ERROR',
},
'mymodule': {
'handlers': ['console', 'mail_admins'],
'propagate': True,
'level': 'DEBUG'

},
}
}

然后像这样运行它。

./manage.py celeryd --event --beat --settings=dev

它的作用是设置两个不同的处理程序。第一个是控制台处理程序,它报告任何 DEBUG 及以上内容。第二个是邮件处理程序,仅查看错误及以上错误。接下来是记录器报告的内容。所有 django.* 记录器都将报告给任何错误级别处理程序 (mail_admins)。我们的任何模块都会将 DEBUG 及以上推送到两者。

我想这就是你所追求的。

关于python - Celery Python 日志记录配置仅从指定模块记录 DEBUG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com