对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在。
下面演示网站 出错后自动添加出错日志的实例
(1)新建一个WebApplication
(2)添加对log4net.dll的引用
(3)在Web.Config (或App.Config)添加配置,
<configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <!-- Define some output appenders --> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="test.txt"/> <appendToFile value="true"/> <maxSizeRollBackups value="10"/> <maximumFileSize value="1024KB"/> <rollingStyle value="Size"/> <staticLogFileName value="true"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingLogFileAppender"/> </root> </log4net> </configuration>
(4)初始化:在程序最开始加入log4net.Config.XmlConfigurator.Configure();不要加到页面的Load
Global.asax
log4net.Config.XmlConfigurator.Configure();
(5)添加错误过滤器MyHandleExceptionAttribute:HandleErrorAttribute
public class MyHandleExceptionAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); LogManager.GetLogger(typeof(MyHandleExceptionAttribute)).Debug("被系统过滤捕获的异常" + filterContext.Exception); filterContext.HttpContext.Response.Redirect("/Error.html"); } }
(6)在FilterConfig.cs中注册此过滤器,替换之前的过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { // filters.Add(new HandleErrorAttribute()); filters.Add(new MyHandleExceptionAttribute()); }
操作完成,这是可以在网页中故意抛出异常,在网站根目录下查看文件test.txt中的出错信息了。
这只是一个log4.net的例子,log4.net还有很多功能,可以保存信息到文件,数据库,还可以定那种消息可邮件等等。