Python-清理Sentry日志处理程序(django)中的键

时间:2018-12-23 12:22:45

标签: python django logging sentry raven

我正在向我的Django项目添加一个Sentry日志处理程序。 我想通过添加清理键和两个处理器来定制哨兵处理程序:raven.processors.SanitizePasswordsProcessorraven.processors.SanitizeKeysProcessor

有没有一种方法可以在日志记录配置中执行此操作,而无需编写新的处理程序类,并用我想要的参数包装raven.contrib.django.raven_compat.handlers.SentryHandler类?

这是我的日志记录配置:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'x': {
        #'format': '[%(asctime)s #%(process)d] %(levelname)s: %(message)s'
        'format': '%(asctime)s - %(name)s  - %(levelname)s - %(message)s - {%(pathname)s:%(lineno)d}'
    }
},
'handlers': {
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'x'
    },
    'sentry': {
        'level': 'ERROR',
        'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler'
    }
},
'loggers': {
    'django': {
        'level': 'INFO',
        'handlers': ['console', 'sentry'],
        'propagate': True
    },
}

谢谢

1 个答案:

答案 0 :(得分:0)

LOGGING配置是添加这些过滤器的错误位置,并且不会清除Sentry事件。

Client Arguments doc中所述,正确的位置是RAVEN_CONFIG,也在Django设置文件中:

RAVEN_CONFIG = {
  'dsn': 'https://<key>:<secret>@sentry.io/<project>',
  'sanitize_keys': [
    'keyname1',
    'keyname2',
  ],
  'processors': (
    'raven.processors.SanitizeKeysProcessor',
    'raven.processors.SanitizePasswordsProcessor',
  )
}

Django 1.4到2.0支持Raven(请参见Django docs)。 Sentry建议为Django 2.1及更高版本使用新的sentry-sdk,并提供Django integration instructions。在Switching to Sentry-Python post中,有一条注释提到了Sentry SDK no longer provides these filters,并建议在需要时编写custom filter。默认情况下,send_default_pii parameterFalse控制记录和发送过去由这些过滤器控制的许多敏感数据,例如IP地址,用户详细信息和cookie。