日志记录类库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("\r\n客户机IP:" + Request.UserHostAddress 
44                  + "\r\n错误地址:" + Request.Url 
45                  + "\r\n异常信息:" + 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就不再记录日志

posted @ 2015-12-10 15:42  Nullobj  阅读(887)  评论(0编辑  收藏  举报