Log4Net 在ASP.NET WebForm 和 MVC的全局配置
使用log4net可以很方便地为应用添加日志功能。应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。
那么我们如何在Web项目中使用Log4Net呢?
配置方面请点击链接跳转上一笔记:
ASP.NET的错误处理机制之二(实例log4net)
这次主要针对上次的错误机制讲解如何进行Log4Net 在ASP.NET WebForm 和 MVC的全局配置
一、MVC中的全局配置
在项目中添加一个全局应用程序类Global.asax,如下图所示:
方法中添加如下代码:
- protected void Application_Start(object sender, EventArgs e)
- {
- #region 应用程序启动时,自动加载配置log4Net
- XmlConfigurator.Configure();
- #endregion
- }
protected void Application_Error(object sender, EventArgs e)
{
#region 捕获全局异常Exception error = Server.GetLastError().GetBaseException();
Exception ex = Server.GetLastError().GetBaseException();
string ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") == null ?
Request.ServerVariables.Get("Remote_Addr").ToString().Trim() :
Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
string logpath = Server.MapPath("~/Log/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
StringBuilder builder = new StringBuilder();
builder.AppendLine(string.Format("========== {0} Application_Error BEGIN ==========", DateTime.Now));
builder.AppendLine("Ip:" + ip);
builder.AppendLine("浏览器:" + Request.Browser.Browser.ToString());
builder.AppendLine("浏览器版本:" + Request.Browser.MajorVersion.ToString());
builder.AppendLine("操作系统:" + Request.Browser.Platform.ToString());
builder.AppendLine("页面:" + Request.Url.ToString());
builder.AppendLine("错误信息:" + ex.Message);
builder.AppendLine("错误源:" + ex.Source);
builder.AppendLine("异常方法:" + ex.TargetSite);
builder.AppendLine("堆栈信息:" + ex.StackTrace);
builder.AppendLine("========== Application_Error END ===================");lock (logpath)
{
try
{
using (var writer = new StreamWriter(logpath, true))
{
ZX.B2C.GoodBaby.Common.LogHelper.WriteLog(typeof(RequestNotification), builder.ToString());
}
}
catch
{
// 防止写文件时,文件被人为打开无法写入等
// 记录日志报错不做处理,不应影响用户继续使用
}
}Server.ClearError();
Response.Redirect("/Error/ErrorPath404");//跳出至404页面#endregion
}
二、WebForm中的全局配置
在项目中添加一个全局应用程序类Global.asax,如下图所示:
方法中添加如下代码:
protected void Application_Start(object sender, EventArgs e)
{
#region 应用程序启动时,自动加载配置log4NetXmlConfigurator.Configure();
#endregion
}
/// <summary>
/// 捕获全局异常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>protected void Application_Error(object sender, EventArgs e)
{
#region 捕获全局异常Exception error = Server.GetLastError().GetBaseException();
Exception ex = Server.GetLastError().GetBaseException();
string ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") == null ?
Request.ServerVariables.Get("Remote_Addr").ToString().Trim() :
Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
string logpath = Server.MapPath("~/Log/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
StringBuilder builder = new StringBuilder();
builder.AppendLine(string.Format("========== {0} Application_Error BEGIN ==========", DateTime.Now));
builder.AppendLine("Ip:" + ip);
builder.AppendLine("浏览器:" + Request.Browser.Browser.ToString());
builder.AppendLine("浏览器版本:" + Request.Browser.MajorVersion.ToString());
builder.AppendLine("操作系统:" + Request.Browser.Platform.ToString());
builder.AppendLine("页面:" + Request.Url.ToString());
builder.AppendLine("错误信息:" + ex.Message);
builder.AppendLine("错误源:" + ex.Source);
builder.AppendLine("异常方法:" + ex.TargetSite);
builder.AppendLine("堆栈信息:" + ex.StackTrace);
builder.AppendLine("========== Application_Error END ===================");lock (logpath)
{
try
{
using (var writer = new StreamWriter(logpath, true))
{
ZX.B2C.GoodBaby.Common.LogHelper.WriteLog(typeof(RequestNotification), builder.ToString());
}
}
catch
{
// 防止写文件时,文件被人为打开无法写入等
// 记录日志报错不做处理,不应影响用户继续使用
}
}Server.ClearError();
Response.Redirect("~/Error.htm");#endregion
}
原文链接:
Log4Net 在ASP.NET WebForm 和 MVC的全局配置
Log4Net 在ASP.NET WebForm 和 MVC的全局配置的更多相关文章
- 解析ASP.NET WebForm和Mvc开发的区别
因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...
- 解析ASP.NET WebForm和Mvc开发的区别 分类: ASP.NET 2013-12-29 01:59 11738人阅读 评论(5) 收藏
因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...
- asp.net core 3.0 MVC JSON 全局配置
asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...
- ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序;ASP.NET WebForm和MVC总体请求流程图
ASP.NET中HttpApplication中ProcessRequest方法中运行的事件顺序 1.BeginRequest 開始处理请求 2.AuthenticateRequest 授权验证请求 ...
- [转]asp.net webform 与mvc 共享session
公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...
- asp.net webform 与mvc 共享session
公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...
- [转]解析ASP.NET WebForm和Mvc开发的区别
因为以前主要是做WebFrom开发,对MVC开发并没有太深入的了解.自从来到创新工场的新团队后,用的技术都是自己以前没有接触过的,比如:MVC 和EF还有就是WCF,压力一直很大.在很多问题都是不清楚 ...
- Asp.Net WebForm和MVC同样优秀!
不是说MVC不好,而是WebForm并没有那么不堪,和Mvc同样优秀.对说WebForm缺点多的,表示不服,求指教,虽然本人有些见解可能比较浅薄. 看过很多文章和书籍,都会拿MVC模式和WebForm ...
- ASP.NET WebForm与MVC优缺点
发表于我的个人网站中,请点击阅读!
随机推荐
- Dojo Chart之常用统计图
很多做web的都知道,在很多web系统中会涉及到一些统计图,例如饼状图,柱状图.趋势图.以及叠加图等.提到这儿,做web的都很熟悉的,jquery的highcharts就能搞定所有的涉及到统计图的功能 ...
- 推荐使用typora
最近在网上接触到一款全新的markdown写作工具--typora. 现在它已经是我的主要写作工具了. 甚至我也也会利用它安排自己的工作和任务. typora介绍 下载链接 特色:可以即时渲染mark ...
- Android 蓝牙 socket通信
Android中蓝牙模块的使用 使用蓝牙API,Android应用程序能够执行以下功能: 扫描其他蓝牙设备查询本地已经配对的蓝牙适配器建立RFCOMM通道通过服务发现来连接其他设备在设备间传输数据管理 ...
- Shell 参数(1)
shell 中参数相关: ./a.sh a b c d $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ ...
- JDBC 3 通过PreparedStatement 对数据库进行增删改查
下面程序沿用上面的封装. 1 插入数据 public boolean ChaRu3(User user){ boolean flag=true; Connection conn=null; Prepa ...
- Python的Django框架中if标签的相关使用
{% if today_is_weekend%} {% end if %} 系统会显示在这之间的内容 {% else %}标签是可选的 在python和django模板系统中,以下对象相当于布尔值的F ...
- Quartz数据库脚本
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
- XMemcached使用经历
XMemcached就是Memcached的java客户端之一,目前项目里用到了.据说它比起其他的java客户端从性能上要好一点,实现方式是NIO的.先看怎么实例化出来一个Memcached客户端吧: ...
- Vue.js:监听属性
ylbtech-Vue.js:监听属性 1.返回顶部 1. Vue.js 监听属性 本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化: 实例 & ...
- mysql设计与开发
架构设计表结构设计索引sql语句1.表结构设计的核心思想是什么?容量评估,性能优化,硬件升级,垂直拆分,水平拆分 2.有个大表为了一个查询(一天就查2次),领导要你建索引(索引空间大小有500G),你 ...