如何设置特定于ASP.NET请求的log4net上下文属性?
|
我一直在使用log4net来记录我们的ASP.NET网站的日志消息,最近我想添加有关发生错误的页面/处理程序的信息.因此,我决定将以下行添加到Global.asax中: void Application_BeginRequest(object sender,EventArgs e)
{
log4net.ThreadContext.Properties["page"] = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
}
并且如智慧我将%属性{page}添加到我的转换模式中: <conversionPattern value="%newline%date %-5level %property{page} - %message%newline%newline%newline" />
这对单个请求工作正常.但是在我的日志中,我注意到在ASP.NET请求期间页面属性可能会发生更改.我已经登录一个ASHX处理程序,在处理过程中,页面属性将更改为指向ASPX页面的其他值.我得出结论,ASP.NET有另一个请求,它的BeginRequest被执行,并且log4net.ThreadContext中的静态页面属性被更改为另一个值. 现在,我想维护每个请求的page属性,以便我可以一直将执行页面的路径记录到日志中.我试图找到一个答案,但我没有出来.推荐的方法来解决这个问题?我相信这是Web服务器事件记录的基本功能. 解决方法由于ASP.NET does not guarantee的整个页面请求将被处理在同一个线程上,所以我更喜欢从HttpContext.Current as log4net processes获取答案记录事件.以下GetCurrentPage类通过覆盖其ToString方法来实现log4net手动调用“Active Property Value”: public class GetCurrentPage
{
public override string ToString()
{
if (null != HttpContext.Current)
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
}
return string.Empty; // or "[No Page]" if you prefer
}
}
在Global.asax的Application_Start中,在log4net的GlobalContext中注册此类. protected void Application_Start(object sender,EventArgs e)
{
XmlConfigurator.Configure();
GlobalContext.Properties["page"] = new GetCurrentPage();
}
当log4net写入该行的%属性{page}部分时,它将调用GetCurrentPage类的ToString方法,该方法将查找当前请求中的值. (编辑:长春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – VS插件:查看标记.存在这样的事情吗?
- asp.net-mvc – 属性似乎根本不起作用
- 在MVC中使用Json.Net序列化和反序列化Json对象
- ASP.net MVC ValidationSummary总是被渲染
- asp.net – 适用于Linq To SQL DAL的静态方法吗?
- ASP.NET:WebResource.axd调用404错误:如何知道哪个程序集
- 单元测试 – 如何在ASP MVC 5(Microsoft.AspNet.Identity)中
- asp.net-mvc – 存储库与DAL中的服务模式:EF和Dapper
- asp.net – 在为app_offline.htm提供特定URL时,将http状态5
- asp.net 分页显示数据表的数据的代码
- VS 2015 CTP 6 Nuget Package Source
- 显示下载进度条的下载文件代码
- asp.net-mvc – 如何在视图上下文之外获取ModelM
- asp.net-mvc – 从控制器重定向初始化不工作
- asp.net – 访问.NET中的Web服务中的查询字符串(
- asp.net-mvc – 程序集使用System.Web.Http 5.1,
- 并行运行ASP.NET Webforms和ASP.NET MVC
- https://github.com/hoyuhub
- asp.net-mvc – DropDownListFor在编辑视图上不重
- asp.net – [DataType(DataType.EmailAddress)]和
