2013-09-25 54 views
7

Tôi đã thiết lập Celery trong một dự án Django mà tôi đang làm việc. Tôi muốn tách khai thác gỗ cho các công việc cần tây so với phần còn lại của nhật ký cần tây (cần tây, cần tây, vv).Django Celery Task Logging

Dựa trên tài liệu Celery (http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging) có vẻ như tôi chỉ có thể xác định trình ghi nhật ký Django cho 'celery.task' nên thực hiện việc này. Tuy nhiên, khi tôi làm điều này, không có gì xuất hiện trong nhật ký. Tất cả mọi thứ hiện lên nếu tôi tạo một logger 'cần tây' chung, ngụ ý rằng điều này có thể là một cái gì đó để làm với tên của logger.

Tôi thiếu gì ở đây? Có cách nào để thực hiện công việc này, hay tất cả các nhật ký cần tây đi cùng nhau?

Đối với những gì đáng giá, tôi đã đặt CELERYD_HIJACK_ROOT_LOGGER = False.

thiết lập đăng nhập của tôi trong settings.py:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'formatters': { 
     'standard': { 
      'format': '%(asctime)s %(levelname)s [%(name)s: %(lineno)s] -- %(message)s', 
      'datefmt': '%m-%d-%Y %H:%M:%S' 
     }, 
    }, 
    'handlers': { 
     'logfile': { 
      'level': 'INFO', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/logfile.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 3, 
      'formatter': 'standard' 
     }, 
     'debug_logfile': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/debug_logfile.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 5, 
      'formatter': 'standard' 
     }, 
     'default_logger': { 
      'level': 'WARNING', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/default.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
     'celery_logger': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/celery.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
     'celery_task_logger': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/celery_tasks.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['default_logger'], 
      'level': 'WARNING', 
      'propagate': True, 
     }, 
     'django': { 
      'handlers': ['logfile'], 
      'level': 'INFO', 
      'propagate': True, 
     }, 
     'feedmanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'recipemanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'menumanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'celery.task': { 
      'handlers': ['celery_task_logger'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'celery': { 
      'handlers': ['celery_logger'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
    } 
} 
+0

celery.tasks hoặc celery.task – toad013

+1

Cảm ơn - không chắc là tôi làm theo dù. Tôi có một logger cho celery.task, và đã thử celery.tasks để tác dụng tương tự. – aravenel

Trả lời

15

tôi đoán trong công việc của bạn của bạn làm điều này

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

nếu bạn làm điều đó sau đó tên logger của bạn sẽ là tên mô-đun, do đó, nếu tác vụ của bạn nằm trong tệp tasks.py trong ứng dụng có tên MyApp, trình ghi nhật ký của bạn sẽ được đặt tên là 'MyApp.tasks' và bạn phải tạo trình đăng nhập 'MyApp.tasks' trong cài đặt của mình.

Bạn chỉ có thể đặt một chuỗi khác thay cho __name__ cho tất cả các tác vụ để đăng nhập vào cùng một trình ghi nhật ký nếu bạn có tất cả các vị trí. ví dụ: 'celery.task'

oh và chắc chắn rằng LogLevel nhân của bạn là những gì bạn muốn nó được

+1

Đó là gần như chắc chắn nó, cảm ơn! Sẽ cố gắng ngay khi làm việc. Ngoài sự tò mò, tại sao nhật ký 'cần tây' chính vẫn nắm bắt các nhật ký công việc này? – aravenel

+1

Đúng, có thể xác nhận tác phẩm này, cảm ơn bạn! Vẫn còn bối rối tại sao logger 'cần tây' chính lại chọn chúng, nhưng tôi có thể sống với cái này. – aravenel