方法一,,用try catch捕获错误信息(不提倡这种用法)
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件、数据库、EventLog等),日志就是程序的黑匣子,可以通过
日志查看系统的运行过程,从而发现系统的问题。日志的作用:将运行过程的步骤、成功失败记录下来,将关键性的数据记录下来分析系统问题所在。Log4J。
对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在
配置Log4Net环境
(1) 新建一个WebApplication(就是新建Web应用程序)
(2) 在UI层,新建Lib文件夹,将log4net.dll 文件赋值进去(把相应的dll文件拷贝到项目中的lib文件夹下。
(3) 在项目中,添加对log4net.dll的引用,(注意:bin\net\2.0\release 不能引用debug版本(原因:release是发布版本,在下载第三方dll时候,记住,下载别人的网站的发布版本的dll,因为debug版本包含很多空指令,包含很多调试信息,所以性能就很差))
(4) 在Web.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>
(5) 初始化:在程序最开始加入log4net.Config.XmlConfigurator.Configure();不要加到页面的Load
(解释这句话:log4net.Config.XmlConfigurator.Configure(); 放在Global.asax 文件(有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法你可以使用这个文件实现应用程序安全性以及其它一些任务) )
参考代码
public class Global : System.Web.HttpApplication { //该方法是Web应用程序的入口类似于Winform,或者是控制台程序中的Main方法。 protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure(); }
(6) 在UI层。创建错误页(例如:Error.aspx,在page_Load方法里面,写“错误”代码)
参考代码:
public partial class 错误日志记录 : System.Web.UI.Page { private static ILog logger = LogManager.GetLogger(typeof(错误日志记录)); protected void Page_Load(object sender, EventArgs e) { try { int i = 0; int a = 2; int b = a / i; } catch (Exception ex) { logger.Error(ex.Message); } } }
(7) 浏览错误页,在项目的根目录下,会自动创建,你在Web.config中自定义的文件的名字的文件
参考代码:
<file value="test.txt"/> --><!--日志文件名-->
(8) 代码:
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
Test.txt(日志文件):2014-05-06 22:21:03,791 [7] ERROR ZY.Project.WebApp.错误日志记录 - 尝试除以零。
解释:记录日志文件的格式;
(9)
<maxSizeRollBackups value="10"/> --><!--文件备份个数--><!-- <maximumFileSize value="1024KB"/> --><!--文件大小--><!--
解释:假设备份的文件名:test.txt
当你日志记录文件达到1M的时候,会产生新的备份文件,假设,产生的新的文件名:test1.txt
当你日志文件就达到1M,那又会自动产生test2.txt,将文件备份到test2.txt里面。
当你日志文件就达到1M,那又会自动产生test3.txt,将文件备份到test3.txt里面。
当你日志备份文件个数,达到你定义的备份数,10 ,那以后的日志文件继续覆盖test1.txt..test2.txt…test.txt……….都会继续覆盖,(当然不用担心,因为,出现问题的时候,系统管理员会及时修改系统的代码。之前记录的日志文件就没用了);
方法二,
更换Log4Net配置
<log4net> <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> <!-- Set root logger level to ERROR and its appenders --> <root> <level value="ALL"/> <appender-ref ref="SysAppender"/> </root> <!-- Print only messages of level DEBUG or above in the packages --> <logger name="WebLogger"> <level value="DEBUG"/> </logger> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" > <param name="File" value="App_Data/" /> <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=" ----------------------header-------------------------- " /> <param name="Footer" value=" ----------------------footer-------------------------- " /> </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>
日志文件在App_Data文件夹里面,
同方法一大多数相同,更改的错误页代码如下:
public partial class 错误日志记录 : System.Web.UI.Page { private static ILog logger = LogManager.GetLogger(typeof(错误日志记录)); protected void Page_Load(object sender, EventArgs e) { //try //{ int i = 0; int a = 2; int b = a / i; //} //catch (Exception ex) //{ // logger.Error(ex.Message); //} } }
Global.asax文件中: