zoukankan      html  css  js  c++  java
  • 日志记录类库log4net的使用总结

      log4net是一个开源的日志记录类库,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键、写入数据库等。这里写个ASP.NET MVC4应用LogNet的Demo:

    1.建立ASP.NET MVC4网站,在web.config中写入log4net的配置文件(就是添加两个节点)

     1 <configuration>
     2   <configSections>
     3     <!-->需要添加第一个的节点<-->
     4     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
     5   </configSections>
     6 
     7   <!-->需要添加第二个的节点<-->
     8   <log4net>
     9     <!--错误日志配置 :其中name 可以程序员自己定义,但是这个名字一定要和 <logger name="logerror">下面的
    10     <appender-ref ref="ErrorAppender"/> 中 ref的值保持一致
    11     -->
    12     <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    13       <!--日志文件存储的位置是:Log\LogError\-->
    14       <param name="File" value="Log\LogError\" />
    15       <!--表示将内容以追加的形式,保存到日志文件中-->
    16       <param name="AppendToFile" value="true" />
    17       <!--每天的日志备份数可以有100个-->
    18       <param name="MaxSizeRollBackups" value="100" />
    19       <!--表示每个日志文件的大小只能是10M-->
    20       <param name="MaxFileSize" value="10240" />
    21       <!--文件名称是固定格式的-->
    22       <param name="StaticLogFileName" value="false" />
    23       <!--文件名称是固定格式为:yyyyMMdd-->
    24       <param name="DatePattern" value="yyyyMMdd" />
    25       <!--每天都是以yyyyMMdd来进行命名文件-->
    26       <param name="RollingStyle" value="Date" />
    27       <!--设定写入的日志格式-->
    28       <layout type="log4net.Layout.PatternLayout">
    29         <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n " />
    30       </layout>
    31     </appender>
    32     <!--log4net.LogManager.GetLogger("logerror")用这个来选择这种类型-->
    33     <!--additivity="false"表示错误记录只写入一次-->
    34     <logger name="logerror" additivity="false">
    35       <!--这个配置文件,如果配置成ALL:表示可以记录 1、信息日志(Info)  2、警告日志(Warn) 3、错误日志(Error)-->
    36       <level value="ALL" />
    37       <appender-ref ref="ErrorAppender" />
    38     </logger>
    39     <root>
    40       <level value="ALL" />
    41       <appender-ref ref="ErrorAppender" />
    42     </root>
    43   </log4net>
    44 </configuration>

    2.建立负责日志记录的LogHelper类

     1 public class LogHelper
     2     {
     3         //通过配置文件的logerror 进行日志写入对象的实例化
     4         public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");   //选择<logger name="logerror">的配置 
     5 
     6         //public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");   //选择<logger name="loginfo">的配置 
     7 
     8         static LogHelper()
     9         {
    10             SetConfig();
    11         }
    12 
    13         /// <summary>
    14         /// 初始化web.config中的<log4net>节点中的配置
    15         /// </summary>
    16         public static void SetConfig()
    17         {
    18             log4net.Config.XmlConfigurator.Configure();
    19         }
    20 
    21         ///// <summary>
    22         ///// 设置自定义的Log4Net配置文件
    23         ///// </summary>
    24         ///// <param name="configFile"></param>
    25         //public static void SetConfig(System.IO.FileInfo configFile)
    26         //{
    27         //    log4net.Config.XmlConfigurator.Configure(configFile);
    28         //}
    29 
    30         /// <summary>
    31         /// 负责将信息日志写入到日志文件
    32         /// </summary>
    33         public static void WriteInfo(string msg)
    34         {
    35             //检查信息日志是否允许
    36             if (logerror.IsInfoEnabled)
    37             {
    38                 //表示写入信息级别的日志
    39                 logerror.Info(msg);
    40             }
    41         }
    42 
    43         /// <summary>
    44         /// 负责将警告日志写入到日志文件
    45         /// </summary>
    46         public static void WriteWran(string msg)
    47         {
    48             if (logerror.IsWarnEnabled)
    49             {
    50                 //表示写入警告级别的日志
    51                 logerror.Warn(msg);
    52             }
    53         }
    54 
    55         /// <summary>
    56         /// 负责将错误日志写入到日志文件
    57         /// </summary>
    58         public static void WriteError(string msg)
    59         {
    60             if (logerror.IsErrorEnabled)
    61             {
    62                 //表示写入异常级别的日志
    63                 logerror.Error(msg);
    64             }
    65         }
    66     }

    3.建立网站与log4net的联系,使log4net能够自动记录网站在运行时出现的异常

    MVC4 版本:

     1     /// <summary>
     2     /// 新建一个继承HandleErrorAttribute的异常类,重写OnException(ExceptionContext filterContext)方法捕捉网站运行时出现的异常。
     3     /// </summary>
     4     public class MyExceptionAttribute : HandleErrorAttribute
     5     {
     6         public override void OnException(ExceptionContext filterContext)
     7         {
     8             Exception exp = filterContext.Exception;
     9             ViewResult view = new ViewResult();
    10             view.ViewName = "/Views/Shared/Error.cshtml";   //新建一个视图对象,当网站出现异常时,跳转到自定义的错误页面
    11             view.ViewData["Error"] = exp.Message;
    12             filterContext.Result = view;
    13             filterContext.ExceptionHandled = true;
    14 
    15             while (exp.InnerException != null)
    16             {
    17                 exp = exp.InnerException;
    18             }
    19 
    20             LogHelper.WriteError(exp.Message);
    21         }
    22     }

    Asp.Net版本:通过在Global.asax的 Application_Error(Object sender, EventArgs e) 事件中,调用LogHelper类的方法来捕获网站异常记录

     1 public class Global : System.Web.HttpApplication
     2     {
     3         void Application_End(object sender, EventArgs e)
     4         {
     5             //  在应用程序关闭时运行的代码
     6 
     7         }
     8 
     9         void Session_Start(object sender, EventArgs e)
    10          {
    11              // 在新会话启动时运行的代码
    12  
    13          }
    14  
    15          void Session_End(object sender, EventArgs e)
    16          {
    17              // 在会话结束时运行的代码。 
    18              // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
    19              // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
    20              // 或 SQLServer,则不会引发该事件。
    21  
    22          }
    23  
    24          /// <summary>
    25          /// 程序启动时配置log4net
    26          /// </summary>
    27          /// <param name="sender"></param>
    28          /// <param name="e"></param>
    29          protected void Application_Start(Object sender, EventArgs e)
    30          {
    31              //若不想把log4net配置文件写在web.config中,也可以另外手动指定。
    32              //XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config")));
    33          }
    34  
    35          /// <summary>
    36          /// 程序出错时通过log4net写日志
    37          /// </summary>
    38          /// <param name="sender"></param>
    39          /// <param name="e"></param>
    40          protected void Application_Error(Object sender, EventArgs e)
    41          {
    42              Exception objExp = HttpContext.Current.Server.GetLastError();
    43              LogHelper.WriteLog("
    客户机IP:" + Request.UserHostAddress 
    44                  + "
    错误地址:" + Request.Url 
    45                  + "
    异常信息:" + Server.GetLastError().Message, objExp);
    46          }
    47      }

    4.关闭log4net日志记录功能

      在配置文件web.config中找到节点<level value="ALL" />,将value值设置成比ERROR高的等级就不会记录日志。value值对应的等级如下:

      OFF
      FATAL
      ERROR
      WARN
      INFO
      DEBUG
      ALL
    由下往上,OFF优先级别最高,设置OFF就不再记录日志

  • 相关阅读:
    spring: web学习笔记1异常处理:No adapter for handler
    maven: maven编译时指定maven库,即指定profile
    spring: 一些基本配置也许只有自己能够读懂
    ruby: rdoc生成文档的好工具
    php: eclipse 编辑 php
    ssh免密码登录, 发送命令到多个Linux
    ruby: 使用netbeans debug ruby
    maven: maven创建工程,web工程等普通java app, web app
    IE, firefox竖向 横向滚动条处理
    获取指定进程在一段时间内cpu和内存的最大最小值【调试版】
  • 原文地址:https://www.cnblogs.com/feiyuhuo/p/5036257.html
Copyright © 2011-2022 走看看