也许我的问题看起来很愚蠢,但我无法理解如何正确设置从芹菜任务的日志记录到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