2015-09-11 37 views
7

如何配置Django logging以支持不同的不同DSN?Django/Raven/Sentry:針對不同DSN的不同記錄器

事情是這樣的:

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!') 

回答

1

嘗試這種方式,工作對我來說

1)寫C ustom處理

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)更改日誌中設置

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)登錄你的錯誤,任何地方

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

它的工作對我來說,與python3.6 django2測試。

相關問題