標籤:總結 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=""Logs_"yyyyMMdd".txt"" /><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=" ----------------------header-------------------------- " /><param name="Footer" value=" ----------------------footer-------------------------- " /></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技術