2016-05-04 179 views
1

我想爲我的基於芹菜的應用程序配置記錄器。 控制檯日誌工作正常。但是,日誌消息不會添加到我指定的日誌文件中: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', 
     }, 
    } 
} 

芹菜和日誌initializiation:

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] [email protected] 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。

+0

樣本輸出從哪裏來?它與'簡單'格式化程序中定義的格式不匹配。 – Pedru

+0

- 第一個直接來自芹菜。第2到第4行是通過簡單的打印完成的。最後一行是從'from celery.utils.log import get_task_logger' - >'logger = get_task_logger(__ name__) '和'logger.warn('it works!')'。 – Jon

回答

1

您可以使用CELERYD_HIJACK_ROOT_LOGGER設置來使用您的自定義記錄器。

app.conf.update(CELERYD_HIJACK_ROOT_LOGGER=False) 

如果您重新啓動worker,它將生成一個芹菜日誌文件。

您可以閱讀更多關於this in celery docs