我想从使用raven处理程序记录到哨兵中排除一些不重要的特定异常。
但是,我找不到任何方法来为这些处理程序配置过滤器。
Java 中类似的日志功能是https://logging.apache.org/log4j/2.0/manual/filters.html
我想做这样的事情
import logging
...
LOGGING = {
'loggers' = {
'django': {
'handlers': ['sentry', 'console'],
'filters': {
'exclude': [ObjectDoesNotExist, ]
},
'level': 'ERROR',
}
}
}
Run Code Online (Sandbox Code Playgroud)
做logging包的支持吗?如果不是,您介意告诉我实现这一目标的最佳方法吗?
谢谢
感谢@georgexsh 的建议,我终于得到了这个解决方案。
# config.log_filter.py
from logging import Filter
from django.core.exceptions import ObjectDoesNotExist
DEFAULT_EXCLUDE_EXCEPTIONS = [ObjectDoesNotExist, ]
class ExceptionFilter(Filter):
def __init__(self, exclude_exceptions=DEFAULT_EXCLUDE_EXCEPTIONS, **kwargs):
super(ExceptionFilter, self).__init__(**kwargs)
self.EXCLUDE_EXCEPTIONS = exclude_exceptions
def filter(self, record):
if record.exc_info:
etype, _, _ = record.exc_info
for excluded_exception in self.EXCLUDE_EXCEPTIONS:
if issubclass(etype, excluded_exception):
return False
return True
# settings.common.py
...
LOGGING = {
...
'filters': {
'exception_filter': {
'()': 'config.log_filter.ExceptionFilter'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['exception_filter']
}
},
'loggers': {
'django': {
'handlers': ['console'],
'level': 'DEBUG',
},
...
}
}
logging.config.dictConfig(LOGGING)
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助那些遇到同样问题的人
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |