【Sentry使用】通过before_send参数过滤event

在这里插入图片描述

今天开始使用commitizen
参考:https://zhuanlan.zhihu.com/p/100773495


今天在做项目时发现如下的代码会出现重复上报Sentry的问题

try:
    ...
except Exception as e:
    capture_exception(e)
    abort(500, description={
        'success': False,
        'code': 500,
        'message': str(e),
        'data': None
    })

在这里插入图片描述
InteralServerError是由abort产生

abort(500, description={
    'success': False,
    'code': 500,
    'message': str(e),
    'data': None
})

OperationalError是由capture_exception产生

capture_exception(e)

我希望abort仅返回给客户端,不上报给Sentry
这时我想到了sentry_sdk.init里的before_send参数

def before_send(event, hint):
    print(hint)
    return event
    
sentry_sdk.init(
    dsn=config.dsn,
    server_name=config.sentry_server_name,
    integrations=[FlaskIntegration()],
    traces_sample_rate=config.traces_sample_rate,
    environment=config.sentry_environment,
    release=config.release,
    before_send=before_send
)

打印出hint
在这里插入图片描述
可以看到hint是个字典,我们可以通过exc_info来进行过滤
最终代码为:

def before_send(event, hint):
    if isinstance(hint['exc_info'][1], werkzeug.exceptions.InternalServerError):
        return None
    else:
        return event
               
sentry_sdk.init(
    dsn=config.dsn,
    server_name=config.sentry_server_name,
    integrations=[FlaskIntegration()],
    traces_sample_rate=config.traces_sample_rate,
    environment=config.sentry_environment,
    release=config.release,
    before_send=before_send
)

参考:
https://github.com/getsentry/sentry-python/issues/149#issuecomment-1056642777

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentry 是一款基于角色的访问控制系统,可以用于实现数据访问权限控制。以下是 Java Sentry 使用教程的示例: 1. 添加 Maven 依赖: ``` <dependency> <groupId>org.apache.sentry</groupId> <artifactId>sentry-core-common</artifactId> <version>1.8.0</version> </dependency> ``` 2. 初始化 Sentry: ``` Configuration conf = new Configuration(); conf.set("sentry.site.url", "http://sentry.example.com:8080/sentry"); SentryServiceClientFactory factory = new SentryServiceClientFactory(conf); SentryPolicyServiceClient client = factory.create(); ``` 3. 创建角色和权限: ``` String roleName = "admin"; List<String> privileges = Arrays.asList("database=example_db->table=example_table->action=select", "database=example_db->table=example_table->action=insert"); client.grantRoleToGroups("example_group", roleName); client.grantPrivilegesToRole(roleName, privileges); ``` 4. 检查用户是否有权限: ``` String userName = "example_user"; Set<String> roles = client.listRolesByGroupName("example_group"); Set<String> userPrivileges = client.listAllPrivilegesByUserName(userName); for (String role : roles) { Set<String> rolePrivileges = client.listAllPrivilegesByRoleName(role); userPrivileges.addAll(rolePrivileges); } boolean hasAccess = userPrivileges.contains("database=example_db->table=example_table->action=select"); ``` 这个示例演示了如何使用 Java Sentry 实现基于角色的访问控制。你可以根据你的实际需求修改示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值