.Net MVC4 log4net的配置
一、首先在使用log4net记录日志的时候,我们要引用log4net.dll文件
二、在web.config中添加一下配置代码
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net" />
</configSections>
接着添加一下配置代码:
<!--站点日志配置部分-->
<log4net>
<!-- Define some output appenders -->
<!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<!-- Set root logger level to ERROR and its appenders -->
<root>
<level value="ERROR"/>
<appender-ref ref="ErrorAppender"/>
</root>
<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="ErrorLogger">
<level value="ERROR"/>
</logger>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender,log4net">
<!--文件保存的地址-->
<param name="File" value="App_Data/" />
<!--是否追加-->
<param name="AppendToFile" value="true"/>
<!--最大日志文件数量-->
<param name="MaxSizeRollBackups" value="50"/>
<!--文件最大值-->
<param name="MaximumFileSize" value="2MB"/>
<!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])-->
<param name="RollingStyle" value="Composite"/>
<param name="DatePattern" value=""Logs_Error"yyyyMMdd".txt""/>
<!--是否只写到一个文件中-->
<param name="StaticLogFileName" value="false"/>
<layout type="log4net.Layout.PatternLayout">
<!--输出格式-->
<!--%logger:错误的对象-->
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline%newline"/>
<param name="Header" value="
-------------------Error-header-------------------

"/>
<param name="Footer" value="
-------------------Error-footer-------------------

"/>
</layout>
</appender>
</log4net>
三、创建一个记录异常的过滤器Log4ExceptionAttribute继承HandleErrorAttribute
public static Queue<Exception> Exceptions = new Queue<Exception>(); /// <summary> /// 重写OnException方法来捕获异常数据 /// </summary> /// <param name="filterContext"></param> public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //捕获当前异常数据 var ex = filterContext.Exception; //将异常数据入队 Exceptions.Enqueue(ex); //跳转到错误页面 filterContext.HttpContext.Response.Redirect("http://www.baidu.com"); }
四、在global.asax中添加一下代码
log4net.Config.XmlConfigurator.Configure(); //开启一个线程,扫描异常信息队列. var filePath = Server.MapPath("/Log/"); ThreadPool.QueueUserWorkItem((a) => { while (true) { //判断队列中是否有数据 if (Log4ExceptionAttribute.Exceptions.Any()) { //出队一条异常信息 var ex = Log4ExceptionAttribute.Exceptions.Dequeue(); //若异常信息不为空 if (ex == null) continue; //将异常信息写入到日志文件中 var logger = LogManager.GetLogger("ErrorLogger"); logger.Error(ex.ToString()); } else { //若异常信息队列为空,则线程休息三秒 Thread.Sleep(3000); } } }, filePath);
最后找到App_Start下的FilterConfig过滤器把刚创建的异常过滤器添加进去
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); filters.Add(new Log4ExceptionAttribute()); }

浙公网安备 33010602011771号