从芹菜任务登录到哨兵



也许我的问题看起来很愚蠢,但是我不明白如何正确设置从芹菜任务记录到 sentry

例如,我有一个具有两个任务的模块tasks.pyfoobar。我想将Logger内部完成任务,然后将所有logger.infologger.error消息直接发送到Sentry,而不是文件。

请告诉我如何正确完成,如果您想使用一些简单的示例。

看哨兵记录

或用以下

替换设置中的记录配置
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:secret@example.com/1',
        },
    },
'loggers': {
    '': {
        'handlers': ['console', 'sentry'],
        'level': 'DEBUG',
        'propagate': False,
        },
    'your_app': {
        'level': 'DEBUG',
        'propagate': True,
    },
   'celery': {
        'level': 'DEBUG',
        'handlers': ['sentry'],
        'propagate': False,
    },
}
}

这是我所做的,并通过了我的烟雾测试。将其放在您的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

相关内容

  • 没有找到相关文章

最新更新