2014-01-21 3 views
2

Возможно, мой вопрос будет казаться глупым, но я не могу понять, как правильно настроить каротаж из задач сельдерея на Sentry.Вход в Sentry от задач сельдерея

Например, у меня есть модуль tasks.py с двумя задачами: foo и bar. Я хочу получить журнал внутри задачи и отправить все logger.info и logger.error сообщениям непосредственно в Sentry, а не в файл.

Пожалуйста, расскажите, как это сделано правильно, и если вы хотите с помощью простых примеров.

ответ

0

взгляд на sentry logging

или заменить конфигурацию протоколирования в вашем settings.py со следующим

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 

'formatters': { 
    'console': { 
     'format': '[%(asctime)s][%(levelname)s] %(name)s %(filename)s:%(funcName)s:%(lineno)d | %(message)s', 
     'datefmt': '%H:%M:%S', 
     }, 
    }, 

'handlers': { 
    'console': { 
     'level': 'DEBUG', 
     'class': 'logging.StreamHandler', 
     'formatter': 'console' 
     }, 
    'sentry': { 
     'level': 'ERROR', 
     'class': 'raven.handlers.logging.SentryHandler', 
     'dsn': 'http://public:[email protected]/1', 
     }, 
    }, 

'loggers': { 
    '': { 
     'handlers': ['console', 'sentry'], 
     'level': 'DEBUG', 
     'propagate': False, 
     }, 
    'your_app': { 
     'level': 'DEBUG', 
     'propagate': True, 
    }, 
    'celery': { 
     'level': 'DEBUG', 
     'handlers': ['sentry'], 
     'propagate': False, 
    }, 
} 
} 
0

Вот то, что я сделал, и проходит мой дым тест. Поместите это в верхней части одной из ваших tasks.py

@setup_logging.connect 
def project_setup_logging(loglevel, logfile, format, colorize, **kwargs): 
    import logging.config 
    from django.conf import settings 
    logging.config.dictConfigClass(settings.LOGGING).configure() 

И мои соответствующие settings.LOGGING

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', 
      'formatter': 'standard', 
      'stream': sys.stdout 
     }, 
     'logfile': { 
      'level': 'DEBUG', 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': './django.log', 
      'maxBytes': 1024*1024*5, # 5 MB 
      'backupCount': 5, 
      'formatter': 'standard', 
     }, 
     'sentry': { 
      'level': 'WARNING', 
      'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 
     }, 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['sentry'], 
      'propagate': True, 
      'level': 'ERROR', 
     }, 
     'django.request': { 
      'handlers': ['sentry'], 
      'level': 'ERROR', 
      'propagate': False, 
     }, 
     'django.db.backends': { 
      'handlers': ['sentry'], 
      'level': 'ERROR', 
      'propagate': False, 
     }, 
     'raven': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     'sentry.errors': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
      'propagate': False, 
     }, 
     '': { 
      'handlers': ['console', 'sentry', 'logfile'], 
      'level': 'INFO', 
     }, 
    } 
} 

Тогда мой тест это ..

@celery.task() 
def dummy_logging_test(**kwargs): 
    """Call this as dummy_test.delay()""" 
    from .models import User 

    log = dummy_logging_test.get_logger() 
    if settings.DEBUG: 
     log.setLevel(logging.DEBUG) 

    log.debug("Debug DUMMY TEST") 
    log.info("Info DUMMY TEST") 
    log.warning("Warning DUMMY TEST") 
    log.error("Error DUMMY TEST") 
    log.critical("Critical DUMMY TEST") 

    try: 
     User.objects.get(id=9999999) 
    except Exception as err: 
     log.exception(err) 
     raise 
Смежные вопросы