MVC 5 下,应用log4net收集异常信息
1、安装log4net。
首先在VS中通过nuget安装logenet,我用的是VS2013,截屏如下:
2、修改web.config
configSections节点下新增
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
configuration节点下新增
<!--日志的配置开始--> <log4net> <root> <level value="ALL"/> <appender-ref ref="SysAppender"/> </root> <logger name="WebLogger"> <!--配置日志的级别,低于此级别的就不写到日志里面去--> <level value="DEBUG"/> </logger> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="logs/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> <param name="Header" value=" ----------------------错误信息开始-------------------------- " /> <param name="Footer" value=" ----------------------错误信息结束-------------------------- " /> </layout> </appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <!--日志的格式--> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> </log4net> <!--日志的配置结束-->
3、LogHelper类(需引用log4net.dll)
public class LogHelper { public static void Log(string msg) { ILog log = LogManager.GetLogger("log4netlogger"); log.Error(msg); } }
4、继承HandleErrorAttribute的类,加入log4net的处理语句。
public class CustomExceptionFileAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); //处理错误消息,将其跳转到一个页面 LogHelper.Log(filterContext.Exception.ToString()); //页面跳转到错误页面 //filterContext.HttpContext.Response.Redirect("/Error.html"); } }
5、修改App_Start/FilterConfig.cs文件
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { //filters.Add(new HandleErrorAttribute()); filters.Add(new CustomExceptionFileAttribute()); } }
6、Global.asax.cs中加载log4net的配置信息。
protected void Application_Start() { //log4net.Config.XmlConfigurator.Configure(); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); log4net.Config.XmlConfigurator.Configure(new FileInfo(Server.MapPath("~/Web.config"))); }
其中log4net.Config.XmlConfigurator.Configure();是网上找的代码,实际测试不能生成日志。