筆試考試系統--專案搭建及用Log4Net記錄日誌
專案架構搭建
一、專案整體採用分層結構,不搞傳統的三層架構,直接用Ul+Service (只是根據專案的不同的變體而已,思想上沒什麼不-樣),建ExamOnLine.Common、ExamOnLine.IService、ExamOnLine. Service、ExamOnLine.DTO、 ExamOnLine.Front.Web、ExamOnLine.Admin.Web、 ExamOnLine.UnitTest(單元測試可以後期再搭)
效果如下:
搭建完成後一定不要忘了各個專案之間的引用
UI層也要安裝EF 層之間新增引用:
ExamOnLine.Iservice層新增:對DTO層的引用、
ExamOnLine.Service層新增:對ExamOnLine.Iservice、ExamOnLine.ZSZ.DTO的引用
ExamOnLine.ExamOnLine.AdminWeb層新增:ExamOnLine.Iservice、ExamOnLine.Service、ExamOnLine.Common、ExamOnLine..DTO引用
ExamOnLine.Front.Web與ExamOnLine..Admin.Web一樣
新增引用步驟如下:
二、配置Log4Net;(前後臺都配置)
搭建ExceptionFilter 列印到Log4Net未處理異常;把EF的日誌通過Debug方式列印到Log4Net;具開發EF實體部分:然後編寫單元測試,確保執行沒問題;後面用的時候都下Database .Setlnitializer<XXXDbContext>(null)
(一)先給大家介紹下Log4Net簡介:
1:什麼是日誌,為什麼需要記錄日誌?
2:Log4NET 是一個從 Java 版的 Log4J 移植過來的日誌框架,可以簡化日誌的記錄;
3、 Log4NET 的概念:
a) 級別:trace、debug、info、warn、error、fatal。常用 debug(除錯資訊,程式設計師臨 時跟蹤執行,在正式執行的專案中應該不顯示);warn(警告);error(錯誤)。
b) 特殊的級別:all(全部顯示);off(全部不顯示);
c) appender:可以把日誌輸出到控制檯、檔案、資料庫、ftp 伺服器,甚至可以把日 志輸出到郵件、簡訊等。不同的輸出場景就是不同的 appender,可以新增多個 appender,可以設定不同的級別級別使用不同的 appender
(二)Log4Net使用步驟:
1:新增Install-Package Log4NET
2:如果 NuGet 沒有給自動配置 App.config,那麼就要在<configuration>的<configSections>節點下 新 增 ( 要 在 頭 部 ) : <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
3:在webConfig裡面新增子節點(在configuration下新增),具體程式碼如下:
<log4net> <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL --> <!-- Set root logger level to ERROR and its appenders --> <root> <level value="DEBUG" /> <appender-ref ref="RollingFileTracer" /> </root> <!-- Print only messages of level DEBUG or above in the packages --> <appender name="RollingFileTracer" type="log4net.Appender.RollingFileAppender,log4net"> <param name="File" value="App_Data/Log/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Composite" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="1MB" /> <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" /> </layout> </appender> </log4net>
4:在程式啟動的時候:log4net.Config.XmlConfigurator.Configure();。容易忘,如果發現日誌檔案一直沒有,先想是不是忘了寫這句話。
5:記 錄 信 息 : ILog logger = LogManager.GetLogger(typeof(WebForm1));
logger.Debug("aaaaaaaaaaaaaa");
6:效能優化: logger.DebugFormat(“hello {0} {}”,"hello")等。 用{n}佔位符,而不是字串拼接,這樣如果配置中不輸出這個級別的時候,就不會進行字串拼接,提升效能。
(三)搭建 ExceptionFilter 列印到 Log4Net 記錄Action未處理的異常;把 EF 的日誌通過Debug 方式列印到 Log4Net,原理如下:
具體配置步驟:
1:新建一個類,在App_Start裡面
using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace ExamOnLine.Admin.Web.App_Start { public class ExamOnLineExceptionFilter : IExceptionFilter { private static ILog log = LogManager.GetLogger(typeof(ExamOnLineExceptionFilter));//宣告Log4NET物件,建議一個類就宣告一個ILog物件 public void OnException(ExceptionContext filterContext) { //只要action出現未處理的異常,這個方法裡面都可以捕獲到 log.ErrorFormat("出現未處理的異常{0}", filterContext.Exception); } } }
2:在global裡面新增 GlobalFilters.Filters.Add(new ZSZExceptionFilter()); //增加自定義異常處理器
using ExamOnLine.Admin.Web.App_Start; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace ExamOnLine.Admin.Web { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { //如果發現日誌檔案一直沒有,先想是不是忘了寫這句話。 log4net.Config.XmlConfigurator.Configure(); GlobalFilters.Filters.Add(new ExamOnLineExceptionFilter()); //增加自定義異常處理器 AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); } } }
這樣就可以了
今天的博文就到這裡,明天給大家分享如何配置EF,配置EF;編寫實體公共父類