python - 日志记录:记录器不记录到文件,而是记录到控制台

标签 python logging celery

我正在尝试为基于 Celery 的应用程序配置记录器。 控制台日志记录工作正常。但是,日志消息不会添加到我指定的日志文件:celery.log

  • 为什么日志消息没有写入日志文件?

这是我的日志记录配置

# log_config.py    

import sys

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

Celery 和日志初始化:

dictConfig(log_config.LOGGING)
app = Celery('app',
             broker=env('CELERY_BROKER_URL', 'amqp://'),
             backend=env('CELERY_BACKEND_URL', 'rpc://'),
             include='tasks')

示例输出

[2016-05-04 12:32:45,077: WARNING/MainProcess] celery@computer1 ready.
[2016-05-04 12:32:47,503: WARNING/Worker-2] [INFO] Running plugin `one` with target `www.example.com`
[2016-05-04 12:32:47,508: WARNING/Worker-1] [INFO] Running plugin `two` with target `www.example.com`
[2016-05-04 12:32:47,559: WARNING/Worker-3] [INFO] Running plugin `three` with target `('127.0.0.1', 'example.com')`
[2016-05-04 12:32:47,559: WARNING/Worker-3] tasks.MySampleTask[31ffe71d-4645-47f2-1237-4c431282ac12]: it works!

PS:我不使用 Django。

最佳答案

您可以使用 CELERYD_HIJACK_ROOT_LOGGER 设置来使用自定义记录器。

app.conf.update(CELERYD_HIJACK_ROOT_LOGGER=False)

如果重新启动worker,它将生成一个celery日志文件。

您可以阅读有关 this in celery docs 的更多信息.

关于python - 日志记录:记录器不记录到文件,而是记录到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37025448/

相关文章:

mysql - 我在哪里可以找到 phpMyAdmin 中的 MySQL 日志?

python - Docker + Celery 告诉我不要以 root 身份运行,但是一旦我不这样做,我就没有运行权限

singleton - celery :任务单例?

python - 结果后端中的 Celery + rabbitmq

python - 如何在OpenERP上实现抽象类?

python - 输入数据行作为python中的参数

c# - 有没有办法跳过 System.Net 中的十六进制日志记录?

Python 从字符串中删除第一个数字,如果它是 0

python - TimedRotatingFileHandler 日志的文件名约定? (Python)

java - Logback无法在控制台写入