Log4Net保存错误日志到文本文件与错误页的配置

一、Log4Net简介

Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件、数据库、EventLog等)

日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题。

日志的作用:将运行过程的步骤、成功失败记录下来,将关键性的数据记录下来分析系统问题所在。

对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在。


二、配置Log4Net环境


(1)新建一个WebApplication

(2)添加对log4net.dll的引用(bin\net\2.0\release 不能引用debug版本)(把相应的dll文件拷贝到项目中的lib文件夹下。)

(3)在Web.Config (或App.Config)添加配置,见备注

(4)初始化:在程序最开始加入log4net.Config.XmlConfigurator.Configure();不要加到页面的Load

在Global.asax.cs的Application_Start(网站应用程序第一次启动时执行此方法,以后都不再执行)----------------中写入以上这段代码
这段代码的作用是:当网站应用程序第一次启动,把放在配置文件中的log4Net配置信息读取出来,这样以来,当网站内部出现错误时,会根据配置信息向指定文件中写入错误信息。

protected void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();
}


(5)在要打印日志的地方LogManager.GetLogger(typeof(Program)).Debug(“信息”); 。通过LogManager.GetLogger传递要记录的日志类类名获得这个类的ILog(这样在日志文件中就能看到这条日志是哪个类输出的了),然后调用Debug方法输出消息。因为一个类内部不止一个地方要打印日志,所以一般把ILog声明为一个static字段。
Private static ILog logger=LogManager.GetLogger(typeof(Test))
输出错误信息用ILog.Error方法,第二个参数可以传递Exception对象。log.Error("***错误"+ex),log.Error("***错误",ex)
测试代码:

 

(5)测试以上(5)


新建一页面Log4Net_Demo.aspx,并修改其后台代码

第一种方式:自己写入日志

protected void Page_Load(object sender,EventArgs e)
{
  
    LogManager.GetLogger(typeof(Log4Net_Demo)).Debug("日志记录");
}

此时运行网站后,查看Log4Net_Demo.aspx之后,打开网站目录,其中多了一个文件test.txt打开后出现:2013-10-27 22:19:01,577 [15] DEBUG Log4NetApp.Log4Net_Demo - 日志记录,此时可以确定Log4Net已成功配置。

第二种方式:使用Try----Catch

protected void Page_Load(object sender,EventArgs e)
{
    try
    {
        int a=10;
        int b=0;
        int c=a/b;
    }
    catch(Exception ex)
    {
  
       LogManager.GetLogger(typeof(Log4Net_Demo)).Debug(ex.Message);
    }
}

此时运行网站后,查看Log4Net_Demo.aspx之后,打开网站目录,其中多了一个文件test.txt打开后出现:2013-10-27 22:54:09,766 [15] DEBUG Log4NetApp.Log4Net_Demo - 尝试除以零。

第三种方式---因为一个网站中可能有多处需要写入错误日志

private static ILog logger=LogManager.GetLogger(typeof(Log4Net_Demo));
protected void Page_Load(object sender,EventArgs e)
{
    try
    {
        int a=10;
        int b=0;
        int c=a/b;
    }
    catch(Exception ex)
    {
  
       logger.Debug(ex.Message);
    }
}


第四种方式--如果一个网站不想用Log4Net写日志记录了想换一种插件,此时不想一个网页一个网页去改,就要考虑把logger放到WebCommon中

public class WebCommon
{
   public static void Logger(Type type, string message)
   {
       LogManager.GetLogger(type).Debug(message);
   }
}


修改Log4Net_Demo.aspx.cs中的代码

protected void Page_Load(object sender, EventArgs e)
{
   try
   {
      int a = 1;
      int b = 0;
      int c = a / b 
   }
   catch (Exception ex)
   {
     WebCommon.Logger(typeof(Log4Net_Demo), ex.Message);
   }
}


第五种方式----------总不能一直加try--catch吧-------网站中的异常信息要去Global.asax中的Application_Error中去捕获
                              Application_Error-----捕获网站应用程序在运行过程中出现的错误信息

protected void Application_Error(object sender, EventArgs e)
{
     Exception ex=HttpContext.Current.Server.GetLastError();
     ILog logger = LogManager.GetLogger(typeof(Global));
     logger.Debug(ex);   //这里最好不要写ex.Message,因为不准
}

修改Log4Net_Demo.aspx.cs中的代码

protected void Page_Load(object sender, EventArgs e)
{
   int a = 1;
   int b = 0;
   int c = a / b 
}



 

 

 

Log4Net基本配置之保存日志到文本文件(学习参考)

<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>

 


这里要注意的是configSections必须是configuration下的第一个元素,否则会出错
 

配置文件解释
              Appender:可以将日志输出到不同的地方,
                                 不同的输出目标对应不同的Appender:RollingFileAppender(滚动文件)、AdoNetAppender(数据库)、SmtpAppender (邮件)等;
              这里用的是滚动文件;
              file是向哪个文件中写入日志记录;
              appendToFile用来指定是不是向日志文件中追加记录(一般都是追加);
              maximumFileSize-----------最多可以向这个文件中写入多大数据这里是1024KB(1M);
              maxSizeRollBackups------如果这个文件中的记录超过1M就是滚动了,当test.txt中的日志达到1M它就会去创建一个文本文件用来存放test.txt中的内容,并将test.txt的内容进行清空,再过一段时间后test.txt中的日志文件又满了它就会再创建一个文本文件去存放test.txt中的内容,并将test.txt,最多可以10个test.txt的备份;
              layout--------------------------日志文件中日志的格式;

              level(级别):标识这条日志信息的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,
                                   设定一个Level,那么低于这个Level的日志是不会被写到Appender中的。

              Log4Net还可以设定多个Appender,可以实现同时将日志记录到文件、数据、发送邮件等;
              可以设定不同的Appender的不同的Level,可以实现普通级别都记录到文件,Error以上级别发送邮件;
              可以实现对不同的类设定不同的Appender;还可以自定义Appender,这样可以自己实现将Error信息发短信等。

             (*)除了Log4Net,还有Enterprise Library中的Logging Application Block、Apache的CommonLog 以及NLog等,都差不多。

 

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="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
   <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="&#13;&#10;----------------------header--------------------------&#13;&#10;" />
    <param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" />
   </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>

 


三、配置错误页

当页面发生错误的时候,asp.net会将错误展示出来(SqlConnection错误就能暴露连接字符串),这样一来不好看,二来会泄露网站的内部信息,给网站带来安全隐患因此要定制错误页
配置Web.Config

<system.web>
  <compilation debug="true" targetFramework="4.0" />
  <customErrors mode="On" defaultRedirect="MyErrorPage.html">
	<error statusCode="500" redirect="SerrorError.html"/>
        <error statusCode="404" redirect="FileNotFind.html"/>
	<error statusCode="403" redirect="NoAccess.html"/>
  </customErrors>
</system.web>


 mode三个可选值:On总是显示定制的错误页面;
                                 Off不显示定制的错误页面,直接显示调用堆栈等异常信息;
                                 remoteonly:对于本机的访问显示调用堆栈等异常信息,对于外部用户显示定制的错误页面。

                                 这样发生错误的话,管理员可以在服务器的浏览器上看到详细的错误信息,普通用户看不到。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值