Log4Net與MVC結合的Tlog技術

來源:互聯網
上載者:User

標籤:總結   deb   layout   lob   異常   use   als   ble   str   

我們在開發web項目中,總會遇到一些異常,或是需要記錄一些資訊。我們也基本都是通過程式寫日誌的方式,來記錄程式的異常資訊,以及其他資訊。那麼今天,我來寫了一個Demo分享一下.NET中,關於Tlog的一個技術,Log4Net.下面是自己總結的一些步驟,沒有太多理論解釋。跟著步驟,即可完成!
    1.添加程式集引用
這當然是必不可少的一步,關於程式集,我們在網上也都能下載! 

2.在models檔案夾裡面建一個類。MyExceptionAttribute:HandleErrorAttribute(注意:前面為類名,後面為繼承的類)內部代碼如下 public class MyExceptionAttribute:HandleErrorAttribute    {        public static Queue<Exception> ExceptionQueue = new Queue<Exception>();//建立一個隊列        public override void OnException(ExceptionContext filterContext)        {            base.OnException(filterContext);            ExceptionQueue.Enqueue(filterContext.Exception);//將異常資訊添加到隊列中   filterContext.HttpContext.Response.Redirect("/Error.html");//跳轉到錯誤頁面,需要建立一個錯誤頁面        }    }

 

 3.修改App_Start-FilterConfig裡面的方法(注釋掉原有的類,採用自己剛才建立的類)public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {           // filters.Add(new HandleErrorAttribute());            filters.Add(new Models.MyExceptionAttribute());//使用自己的類        }

    

4.設定設定檔的配置資訊
註:這裡的設定檔,設定了關於之日檔案的格式等。我這裡是按照日期建立,也就是一天 建立一個檔案,一天之內的日誌都會記錄在同一個文本內<configSections>    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>  </configSections> <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> 

5.在global檔案的Application_Start()方法的第一行,添加這個語句   log4net.Config.XmlConfigurator.Configure();//讀取設定檔中,關於lognet的配置資訊具體如下
註:這句代碼是讀取設定檔中關於lognet的配置資訊,必須寫在程式的入口處,那自然是global檔案下的Application_Start()方法了6.在global檔案下的Application_Start()中添加寫日誌的代碼,如下  protected void Application_Start()        {            log4net.Config.XmlConfigurator.Configure();//讀取設定檔中,關於lognet的配置資訊             AreaRegistration.RegisterAllAreas();             WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);             string fileLogPath = Server.MapPath("/Log/");            //線程池            ThreadPool.QueueUserWorkItem((a) => {                while (true)                {                    if (Models.MyExceptionAttribute.ExceptionQueue.Count() > 0)                    {                        Exception ex = Models.MyExceptionAttribute.ExceptionQueue.Dequeue();//出隊                        //建立檔案                        if (ex != null)                        {                             ILog logger=LogManager.GetLogger("errorrMsg");//起一個名字                             logger.Error(ex.ToString());                        }                        else                        {                            Thread.Sleep(3000);//如果隊列中沒有訊息休息3秒,千萬不能少                        }                    }                    else                    {                        Thread.Sleep(3000);//如果隊列中沒有訊息休息3秒,千萬不能少                    }                }            },fileLogPath);

        } 
這樣就大功告成了, 另附產生後的日誌代碼一張。
下面我們故意拋一個異常

   public ActionResult Show()        {            int b = 0;            int c = 9 / b;            return Content(c.ToString());        }
檔案配置在了App_Data檔案夾中
日誌代碼如下 

Log4Net與MVC結合的Tlog技術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.