也許我的問題看起來很愚蠢,但我無法理解如何正確設置從芹菜任務的日誌記錄到Sentry。從芹菜任務記錄到Sentry任務
例如,我有一個模塊tasks.py
有兩個任務:foo
和bar
。 我想讓任務內部的記錄器直接發送所有logger.info
和logger.error
消息給Sentry,而不是文件。
請告訴我它是如何正確完成的,如果你想用一些簡單的例子。
也許我的問題看起來很愚蠢,但我無法理解如何正確設置從芹菜任務的日誌記錄到Sentry。從芹菜任務記錄到Sentry任務
例如,我有一個模塊tasks.py
有兩個任務:foo
和bar
。 我想讓任務內部的記錄器直接發送所有logger.info
和logger.error
消息給Sentry,而不是文件。
請告訴我它是如何正確完成的,如果你想用一些簡單的例子。
或更換日誌配置在您的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,
},
}
}
這裏是我做的,並通過我的煙霧測試。把這個在您的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