gpt4 book ai didi

c# - 如何在 Global.asax 中获取来自另一个 .aspx 页面的 log4net 日志记录信息?

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:44 25 4
gpt4 key购买 nike

我有一个 .aspx 页面,其中包含一些需要很长时间执行并触发请求超时的同步代码。例如:

protected void Page_Load(object sender, EventArgs e)
{
var log = LogManager.GetLogger("test");
log.Debug("Before thread sleep...");
Thread.Sleep(99999999);
log.Debug("After thread sleep.");
}

在我的 Global.asax 中,我添加了一些错误处理,可以通过电子邮件发送任何异常:

protected void Application_Error(Object sender, EventArgs e)
{
var exception = HttpContext.Current.Server.GetLastError();
SendExceptionEmail(exception);
}

问题是,在 Global.asax 中,我只能访问请求和响应以及发生的异常,但不能访问记录器的输出。我如何在 Global.asax 中访问它?没有它,我无法在不挖掘日志文件的情况下判断是哪段代码挂起了应用程序,这是一项需要过滤的主要工作。

最佳答案

'log' 对象是一个静态变量,尝试在 Global.asax Application_Error() 中获取它是不正确的。根据线程池中的当前线程,您可能会在其中获得不可预测的值。一种更安全的方法可以与 log.Debug() 一起将一些调试数据插入到 HttpContext.Current.Items 中。然后您可以在 Application_Error() 方法中访问这些项目。Context.Items 被认为是线程安全的,建议在这种情况下使用。

关于c# - 如何在 Global.asax 中获取来自另一个 .aspx 页面的 log4net 日志记录信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com