Django Celery 日志记录最佳实践

2024-02-08

我正在尝试让 Celery 日志记录与Django。我已经设置了日志记录settings.py转到控制台(这工作正常,因为我正在托管Heroku)。在每个模块的顶部,我有:

import logging
logger = logging.getLogger(__name__)

在我的tasks.py 中,我有:

from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)

这对于记录来自任务的调用效果很好,我得到如下输出:

2012-11-13T18:05:38+00:00 app[worker.1]: [2012-11-13 18:05:38,527: INFO/PoolWorker-2] Syc feed is starting

但是,如果该任务然后调用另一个模块中的方法,例如Aqueryset方法,我得到重复的日志条目,例如

2012-11-13T18:00:51+00:00 app[worker.1]: [INFO] utils.generic_importers.ftp_processor process(): File xxx.csv already imported. Not downloaded
2012-11-13T18:00:51+00:00 app[worker.1]: [2012-11-13 18:00:51,736: INFO/PoolWorker-6] File xxx.csv already imported. Not downloaded

我想我可以用

CELERY_HIJACK_ROOT_LOGGER = False

只需使用Django但是当我尝试它时这不起作用,即使我确实让它工作,我也会失去"PoolWorker-6"我确实想要一点。 (顺便说一句,我不知道如何让任务名称显示在 Celery 的日志条目中,因为the docs http://docs.celeryproject.org/en/master/configuration.html?highlight=celeryd_task_log_format#std:setting-CELERYD_TASK_LOG_FORMAT似乎表明它应该)。

我怀疑我在这里遗漏了一些简单的东西。


当您的记录器在“另一个模块”的开头初始化时,它会链接到另一个记录器。它处理您的消息。它可以是根记录器,或者通常我在 Django 项目中看到的 - 具有名称的记录器''.

最好的方法是覆盖您的日志记录配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'simple': {
            'format': '%(levelname)s %(message)s',
             'datefmt': '%y %b %d, %H:%M:%S',
            },
        },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'celery': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'celery.log',
            'formatter': 'simple',
            'maxBytes': 1024 * 1024 * 100,  # 100 mb
        },
    },
    'loggers': {
        'celery': {
            'handlers': ['celery', 'console'],
            'level': 'DEBUG',
        },
    }
}

from logging.config import dictConfig
dictConfig(LOGGING)

在这种情况下,我想它应该像你想象的那样工作。

附: Python2.7+中添加了dictConfig。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Celery 日志记录最佳实践 的相关文章

随机推荐

  • Ajax FormData 追加列表对象

    您好 我在将数据发布到控制器时遇到问题 现在我有以下一个模型 public class Media public int Id get set public string Category get set public string Gui
  • 就地数组重新排序?

    假设我有一个数组a长度n和第二个数组indices 也有长度n indices包含序列的一些任意排列 0 n 我想重新安排a这样它就按照指定的顺序indices 例如 使用 D 语法 auto a 8 6 7 5 3 0 9 auto in
  • 调用ActiveRecord的#relationship_ids = [1,2,3]立即保存。有什么解决方法吗?

    我在 ActiveRecord 的 relationship ids 方法中遇到了一个奇怪的问题 当您声明 has many 时会自动添加 该方法会立即保存现有记录 这给我带来了一些问题 我想知道是否有人有任何有用的建议 我正在运行 Rai
  • 这个javascript的结果是什么?

    function getAttackString var foo d322yvb34 var bar x3nj4nhj9 return The code is foo substr 3 foo length 6 bar substr 2 我
  • JAX-RS 和 JSON 搞砸了

    我已经设置了这个简单的 Java 类 import javax xml bind annotation XmlRootElement XmlRootElement public class Person private int id pri
  • 使用 jquery-uidraggable 对可拖动对象进行分组

    我想使用 jquery Draggable droppable 让用户选择一组对象 每个对象在角落里都有一个复选框 然后将所有选定的对象作为一组拖动 我一辈子都不知道该怎么做 哈哈 我认为这将导致一个可用的解决方案 在每个可拖动对象上 使用
  • jQuery 手风琴焦点

    这是我的第一篇文章 如果您想了解更多信息 请告诉我 我正在使用选择列表和 jQuery 手风琴 当用户从列表中选择一个值时 它会使用 activate 方法打开折叠面板的相关部分 除了将窗口集中在手风琴上而不是让用户留在同一个地方之外 这工
  • RxJava/RxAndroid - 处理多个 EditText 更改

    我有 3 个 EditText 字段 并且为这些字段创建了 3 个可观察值 Observable
  • 如何在 Java 中设置工具提示的插图?

    我创建了一个带有 HTML 格式文本的工具提示 效果很好 但边框和文本之间没有空格 如何设置 Insets 或 EmptyBorder 找到了一篇关于如何更改 Java ToolTip 的属性 背景 边框等 http blogs oracl
  • 禁用 htaccess 中的 php 功能

    我正在尝试创建一个流行网站的私人克隆 该网站提供了 在线编写 php 代码 作为个人练习的可能性 我在文本区域写了一些代码 代码以某种方式在服务器端执行 返回输出 我希望输出与 apache 实例提供的输出完全相同 并包含我的代码生成的所有
  • Axis2 无法加载 DLL

    我在 Apache Axis2 日志文件中发现了以下行 Sat Nov 14 12 16 08 2015 error util src class loader c 167 Loading shared library lib axis2
  • MongoDB 查询生成 OR 响应而不是 AND

    我正在使用 MongoDB 版本 2 6 5 并且我有一个如下所示的集合 id ObjectId 555a3398f4c572a44f877dcd created ISODate 2015 05 18T17 02 14 951Z value
  • 如何为应用程序引擎应用程序设置 vscode Python 调试器?

    按照官方的步骤操作后wiki https code visualstudio com docs python debugging google app engine debugging使用断点启动或设置断点时 我不断收到以下错误 ptvsd
  • 如何从 PHP 列表中随机选择 10 个内容?

    我知道如何选择one数组中的随机项 但是怎么样ten从一组 例如 二十个 项目中随机选择项目 在 PHP 中 让它变得更复杂的是 每个项目实际上都有两部分 文件名和描述 基本上 它适用于每次重新加载时都会显示十个随机图像的网页 该数据的实际
  • 在 Javascript 中分割字符串

    我正在尝试从以下 href 中提取文章 ID MarketUpdate Pricing 9352730 我只想提取字符串末尾的 ID 并使用以下代码 var newsLink this attr href var newsString ne
  • 如何设置 CLion 以使用 waf 作为构建系统

    我正在尝试配置我的 Intellij Clion IDE 以使用 ns 3 由于 ns 3 使用的是 waf 它比我想象的更棘手 并且很高兴听到任何建议 CLion 支持编译数据库 https www jetbrains com help
  • 命令行中的“@”是什么意思?

    将 放在某些内容 例如包含 Java 运行命令的类路径条目的文件的路径 之前有什么效果 我知道这与文件内容有关 但正如您可以想象的那样 尝试在 Google 上搜索它有点困难 我也找不到谈论它的联机帮助页 它在不同的程序中可能意味着不同的事
  • 匿名类型可以从另一个类型继承吗?

    根据 MSDN 文档StringComparer OrdinalIgnoreCase http msdn microsoft com en us library system stringcomparer ordinalignorecase
  • SketchUp 导出带有纹理的 obj - 如何

    Windows 7 64 位 SketchUp Make 13 0 4812 Goal 将 SketchUp skp 模型转换为 obj并使用 Three js 加载到 WebGL Problem sketchup 将模型导出到 obj具有
  • Django Celery 日志记录最佳实践

    我正在尝试让 Celery 日志记录与Django 我已经设置了日志记录settings py转到控制台 这工作正常 因为我正在托管Heroku 在每个模块的顶部 我有 import logging logger logging getLo