Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django/Raven/Sentry: different loggers for different DSNs

How can I configure Django logging to support different DSNs for different loggers?

Something like this:

settings.py

  LOGGING = {
    ..
    'handlers': {
        'sentry1': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.handlers.SentryHandler',
            'dsn': '<DSN1>',
        },        
        'sentry2': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.handlers.SentryHandler',
            'dsn': '<DSN2>',
        },
    },
    'loggers': {
        'sentry1':{
            'handlers': ['console', 'sentry1'],
            'level': 'ERROR',
            'propagate': False,
        },
        'sentry2':{
            'handlers': ['console', 'sentry2'],
            'level': 'ERROR',
            'propagate': False,
        },
}

views.py

import logging
logger = logging.getLogger('sentry2')
logger.error('yeey!')
like image 541
kev Avatar asked Sep 11 '15 00:09

kev


1 Answers

Try this way it worked for me

1) Write custom handler

from __future__ import absolute_import

import logging

from raven.handlers.logging import SentryHandler


class CustomHandler(SentryHandler):
    def __init__(self, *args, **kwargs):
        dsn = kwargs.pop('dsn', None)

        self.tags = kwargs.pop('tags', None)

        logging.Handler.__init__(self, level=kwargs.get('level', logging.NOTSET))

        super(CustomHandler, self).__init__(dsn, **kwargs)

2) Change your logging in settings

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'verbose': {
        'format': '%(levelname)s %(asctime)s %(module)s '
                  '%(process)d %(thread)d %(message)s'
    },
},
'handlers': {
    'sentry1': {
        'level': 'ERROR',
        'class': 'project.sentry.CustomHandler',
        'dsn': '<DSN1>',
    },
    'sentry2': {
        'level': 'ERROR',
        'class': 'project.sentry.CustomHandler',
        'dsn': '<DSN2>',
    },
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'verbose'
    }
},
'loggers': {
    'sentry1': {
        'handlers': ['sentry1'],
        'level': 'ERROR',
        'propagate': False,
    },
    'sentry2': {
        'handlers': ['sentry2'],
        'level': 'ERROR',
        'propagate': False,
    },
}
}

3) Log your errors anywhere

import logging
logger = logging.getLogger('sentry2')
logger.error('yeey!')

It worked for me, tested with python3.6 django2.

like image 167
Davit Tovmasyan Avatar answered Nov 20 '22 17:11

Davit Tovmasyan