2014-01-21 34 views
2

也许我的问题看起来很愚蠢,但我无法理解如何正确设置从芹菜任务的日志记录到Sentry从芹菜任务记录到Sentry任务

例如,我有一个模块tasks.py有两个任务:foobar。 我想让任务内部的记录器直接发送所有logger.infologger.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