c# - Asp.net Core 如何记录 System.AccessViolationException
问题描述
我们最近发现我们的应用程序System.AccessViolationException
在使用一些第三方库进行一些非托管内存访问时会抛出异常。我当然会尝试与第三方合作以从他们那里获得修复,但这篇文章不是为了那个:)。
我希望对如何将异常信息实际获取到我的日志中获得一些见解。我们正在运行 Asp.net Core 5。我们仅通过启用才发现此错误stdoutLogEnabled
:https ://docs.microsoft.com/en-us/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-5.0# aspnet-core-module-stdout-log-iis。但是,不建议将其用于生产环境。所以我目前的问题是,我如何才能 stdoutLogEnabled=true
通过使用其他一些日志记录提供程序(即Log4Net
.
我的 appsettings 中有以下内容:
"Logging": {
"LogLevel": {
"Default": "Trace",
}
},
然而,当我运行一些不安全的代码来模拟时,System.AccessViolationException
我看不到是否登录了我的任何log4net
附加程序。
我不需要专门为 log4net 工作,这正是我们今天使用的。一般来说,我希望能够使用一些高级日志提供程序来捕获此日志,以便它可能在服务器上的本地文件以外的地方记录。
stdoutLogEnabled
服务器上的示例日志输出形式
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Repeat 2 times:
--------------------------------
at +.(IntPtr, System.String, Byte[], Int32, IntPtr ByRef, Int32 ByRef, IntPtr ByRef, System.String ByRef)
--------------------------------
at d.( , System.String, System.IO.Stream)
at ThirdPartyClass.Save(System.String, System.IO.Stream)
at FirstPartyClass.CreateImage()
at FirstPartyClass.Execute()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
编辑:添加更多信息。我确实读过这篇类似的文章:Gracefully handling corrupted state exceptions in .NET Core 这对我的问题来说不是个好兆头。我的问题确实不同,因为我不在乎捕捉异常,我对应用程序崩溃没意见。我只是想确保当这些错误确实发生时,我们可以将此信息记录到我们选择的日志提供程序中。
解决方案
要获得这样的未处理异常,请确保您正在调用UseExceptionHandler
在下面的链接中搜索“捕获并记录未处理的异常”
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-5.0
在启动类中,查找函数
public void Configure
在该函数中,确保您UseExceptionHandler
按如下所示调用,如文档中所述。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
推荐阅读
- scala - 如何在 Scala Swing 中使用 actionlistener
- c - 将 vsftpd 移植到 Rust
- mysql - MySQL 错误代码 1005,尽管数据类型相同
- objective-c - 如何初始化私有成员变量
- vb.net - 修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误
- python - 如何使用Python循环并将数组中的值发送到硒中的多个文本框?
- python - [Python][Selenium]“.find_element_by_class_name.click()”上的错误
- django-rest-framework - 如何显示与其他模型相关的模型的详细信息?
- python - 最小化损失函数时Tensorflow太慢
- python - Visual Code Studio 中的调试出现错误。为什么?