码迷,mamicode.com
首页 > Web开发 > 详细

日志记录类库log4net的使用总结

时间:2015-12-10 16:40:27      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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就不再记录日志

日志记录类库log4net的使用总结

标签:

原文地址:http://www.cnblogs.com/feiyuhuo/p/5036257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!