ASP.NET哨兵配置
ASP.NET Sentry Configuration
我有一个 ASP.NET MVC (4.6.1) 网站,我们正在尝试使用哨兵服务对其进行监控。
根据设置文档,它只是说要尽早初始化 Sentry,但是他们的示例结构让我有理由怀疑没有更多的东西。在我的 Gloabl.asax.cs 文件中,我正在调用包含哨兵初始化的自定义模型 class。这是 class:
的副本
public class SentryModel
{
public static void Configure()
{
var environment = ConfigurationManager.AppSettings["Environment"];
//escape the method if we are in a development environment
if (environment.Equals("development", StringComparison.CurrentCultureIgnoreCase))
return;
Assembly web = Assembly.GetExecutingAssembly();
AssemblyName webName = web.GetName();
string myVersion = webName.Version.ToString();
string dsn_data = ConfigurationManager.ConnectionStrings["Sentry"].ConnectionString;
using (SentrySdk.Init(o =>
{
o.Dsn = new Dsn(dsn_data);
o.MaxBreadcrumbs = 50;
o.Debug = true;
o.Environment = environment;
o.Release = myVersion;
o.AttachStacktrace = true;
}))
{
// app code here
}
}
}
我在这里担心的是,我们真的应该在“//这里的应用程序代码”所在的地方有一些东西,但没有关于具体是什么的指导。我们显然希望哨兵监控应用服务中发生的所有错误和事件。我已经看到一些示例,其中异常被显式发送到 Sentry,但没有关于初始化服务和处理被动捕获的正确方法。
谢谢
您使用的示例,其中注释应用程序代码在这里,不能与ASP.NET经典一起使用,因为应用程序的真正启动是由 IIS 管理的.
SentrySdk.Init
returns 实现 IDisposable
的对象,用于正常关闭 SDK。这是确保在应用程序关闭之前清除内部事件队列所必需的。这样您就不会丢失任何事件。
在您当前的设置中,在 Configure
方法结束时,SDK 将被禁用,因为您已将其包装在 using
块中。所以它会被初始化并立即关闭。
您需要做的是在启动期间调用 Init
并在应用程序关闭时处理它 returns 的对象。除此之外,在 global.asax
的 Application_Error
事件处理程序中添加 SentrySdk.CaptureException
。
Sentry有一个example on GitHub on how to use the SDK with 'classic' ASP.NET and global.asax
here但重要的部分如下:
protected void Application_Start()
{
// Set up the sentry SDK
_sentry = SentrySdk.Init(o =>
{
o.Dsn = new Dsn(ConfigurationManager.AppSettings["SentryDsn"]);
});
}
protected void Application_Error()
{
var exception = Server.GetLastError();
// Capture unhandled exceptions
SentrySdk.CaptureException(exception);
}
protected void Application_End()
{
// Close the Sentry SDK (flushes queued events to Sentry)
_sentry?.Dispose();
}
我有一个 ASP.NET MVC (4.6.1) 网站,我们正在尝试使用哨兵服务对其进行监控。
根据设置文档,它只是说要尽早初始化 Sentry,但是他们的示例结构让我有理由怀疑没有更多的东西。在我的 Gloabl.asax.cs 文件中,我正在调用包含哨兵初始化的自定义模型 class。这是 class:
的副本public class SentryModel
{
public static void Configure()
{
var environment = ConfigurationManager.AppSettings["Environment"];
//escape the method if we are in a development environment
if (environment.Equals("development", StringComparison.CurrentCultureIgnoreCase))
return;
Assembly web = Assembly.GetExecutingAssembly();
AssemblyName webName = web.GetName();
string myVersion = webName.Version.ToString();
string dsn_data = ConfigurationManager.ConnectionStrings["Sentry"].ConnectionString;
using (SentrySdk.Init(o =>
{
o.Dsn = new Dsn(dsn_data);
o.MaxBreadcrumbs = 50;
o.Debug = true;
o.Environment = environment;
o.Release = myVersion;
o.AttachStacktrace = true;
}))
{
// app code here
}
}
}
我在这里担心的是,我们真的应该在“//这里的应用程序代码”所在的地方有一些东西,但没有关于具体是什么的指导。我们显然希望哨兵监控应用服务中发生的所有错误和事件。我已经看到一些示例,其中异常被显式发送到 Sentry,但没有关于初始化服务和处理被动捕获的正确方法。
谢谢
您使用的示例,其中注释应用程序代码在这里,不能与ASP.NET经典一起使用,因为应用程序的真正启动是由 IIS 管理的.
SentrySdk.Init
returns 实现 IDisposable
的对象,用于正常关闭 SDK。这是确保在应用程序关闭之前清除内部事件队列所必需的。这样您就不会丢失任何事件。
在您当前的设置中,在 Configure
方法结束时,SDK 将被禁用,因为您已将其包装在 using
块中。所以它会被初始化并立即关闭。
您需要做的是在启动期间调用 Init
并在应用程序关闭时处理它 returns 的对象。除此之外,在 global.asax
的 Application_Error
事件处理程序中添加 SentrySdk.CaptureException
。
Sentry有一个example on GitHub on how to use the SDK with 'classic' ASP.NET and global.asax
here但重要的部分如下:
protected void Application_Start()
{
// Set up the sentry SDK
_sentry = SentrySdk.Init(o =>
{
o.Dsn = new Dsn(ConfigurationManager.AppSettings["SentryDsn"]);
});
}
protected void Application_Error()
{
var exception = Server.GetLastError();
// Capture unhandled exceptions
SentrySdk.CaptureException(exception);
}
protected void Application_End()
{
// Close the Sentry SDK (flushes queued events to Sentry)
_sentry?.Dispose();
}