zoukankan      html  css  js  c++  java
  • .net core 集成 sentry 进行异常报警

    .net core 集成 sentry 进行异常报警

    Intro

    Sentry 是一个实时事件日志记录和汇集的平台。其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈。它分为客户端和服务端,客户端(目前客户端有 C#, Python, PHP, JavaScript, Ruby等多种语言)就嵌入在你的应用程序中间,程序出现异常就向服务端发送消息,服务端将消息记录到数据库中并提供一个web页方便查看。

    Sentry 是 Python 写的一个开源的项目 https://github.com/getsentry/sentry 而且可以满足私有部署的需求

    官方介绍:

    Sentry is cross-platform application monitoring, with a focus on error reporting.

    Sentry fundamentally is a service that helps you monitor and fix crashes in realtime. The server is in Python, but it contains a full API for sending events from any language, in any application

    使用效果

    sentry 里每一个错误/异常被视为一个 issue,在 sentry 的后台可以看到对应项目的错误信息,并且会受到 sentry 的邮件推送

    sentry-issues

    sentry-issue-detail

    dotnetcore 集成

    针对 asp.net core 的集成,分为两种方式,sentry 提供了一个底层一点的基于 Microsoft.Extensions.Logging 的集成方式(Sentry.Extensions.Logging)和基于 asp.net core 框架的集成方式(Sentry.AspNetCore),我目前在用基于 logging 方式的集成方式(基于 asp.net core 的集成是后来才有的,后面也没有再修改),如果要集成 asp.net core 项目可以直接使用 Sentry.AspNetCore

    我目前用的是 Sentry.Extensions.Logging 基本配置如下:

    loggerFactory
        .AddSentry(options =>
            {
                options.Dsn = Configuration.GetAppSetting("SentryClientKey");
            });
    

    Dsn 是创建项目之后在项目的配置里可以看得到

    More Config

    loggerFactory
        .AddSerilog()
        .AddSentry(options =>
        {
            options.Dsn = Configuration.GetAppSetting("SentryClientKey");
            options.Environment = env.EnvironmentName; // 设置环境
            options.MinimumEventLevel = LogLevel.Error; // 设置 sentry event 级别
        });
    

    修改 sentry event 信息,对于发生的错误异常可以在发送到 sentry 服务器端之前做修改,对于要忽略的异常也可以在这个事件中做,比如系统中的 TaskCanceledException ,我在使用异步查询方法的时候会传递一个 CancellationToken ,客户端中断了请求就会导致这个 Token 的 Cancel 事件被触发,EF 就会报一个 TaskCanceledException 前段时间,sentry 经常会给我发一些异常邮件,全都是 TaskCanceledException,我们可以在这个事件里判断如果异常时 TaskCanceledException 就返回一个 null, 这样这个异常就不会被提交到 sentry 服务器端了

    options.BeforeSend = (sentryEvent) =>
    {
        // ignore TaskCanceledException/OperationCanceledException
        if (sentryEvent.Exception is TaskCanceledException ||
            sentryEvent.Exception is OperationCanceledException)
        {
            return null;
        }
    
        return sentryEvent;
    };
    

    More

    除了基本的异常信息的展示和推送,sentry 还会做异常信息的聚合,相同的异常信息只会展示为一个,还可以做 issue 的分发指派,还可以和 Github、Gitlab 等第三方服务集成,在 Github 中创建 issue 等,更多用法等待着你去发现

    Reference

  • 相关阅读:
    [报错]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一
    修改UISearBar的文字颜色,placehoder颜色及输入框颜色
    designated initializer和secondary initializer是什么?
    设置UIButton的文字居右显示 去掉点击默认置灰效果
    设置UITextField的placeholder的颜色
    Xcode8和iOS10的适配问题
    [转载]做一个 App 前需要考虑的几件事
    git 常用命令行整理
    Xcode中使用GitHub详解
    截取字符串
  • 原文地址:https://www.cnblogs.com/weihanli/p/12678780.html
Copyright © 2011-2022 走看看