MVC4下配置log4net 五部曲
第一步:把log4net.dll 編譯成Framework 4.0
?
第二步:找到項目的Properties下的AssemblyInfo。在最下面添加:[assembly: log4net.Config.XmlConfigurator(Watch = true)]。
?
第三步:Web.config
<configuration><configSections><section name="log4net" type="System.Configuration.IgnoreSectionHandler"/></configSections><log4net><appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"><file value="logs/"/><appendToFile value="true"/><rollingStyle value="Date"/><datePattern value="yyyy-MM-dd.TXT"/><staticLogFileName value="false"/><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date ThreadID:[%thread] Log Level:%-5level Class:%logger Desp:%message%newline"/></layout></appender><root><appender-ref ref="LogFileAppender"/></root></log4net> </cconfiguration>?
?
第四步:Global.asax Applicatin_Start方法內添加:ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
?
第五步:LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error("logtest");
?
?
其它:全局性的 ERROR HANDLER
[ASP.NET MVC] Error Handling(3) – 全局性的 Error Handler
現在來看怎么讓 HandleErrorAttribute 應用到整個網站?
只要定義全局性的 Error Handler 就行了。
在 /App_Start/FilterConfig.cs 里,里面會有一個 RegisterGlobalFilters() Method。
可以看到里面已經有一行 filters.Add(new HandleErrorAttribute()); 。
這行是預設的,意思就是他會捕捉到所有 Error,如果你在第一篇文章里,把這一行批注掉,那他無法捕捉 Error,最后就沒辦法顯示我們自定義的 Error Page。
接著我們把第二章的程序改寫在這邊。
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {filters.Add(new HandleErrorAttribute{ExceptionType = typeof(System.Data.DataException),View = "DatabaseError"});filters.Add(new HandleErrorAttribute()); }這邊要注意的是,他執行的順序是由上而下的,當上面的 filter 無法捕捉錯誤 時,才會繼續往下執行,而因為我們無法定義所有的錯誤,所以我們并不會把它默認的那一行程序刪除,而是把我們的 filter 加在上面,這樣才能確保抓到所有的錯誤。
而你也可以手動指定它們執行的順序,只要加上第二個參數就行了。
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {filters.Add(new HandleErrorAttribute{ExceptionType = typeof(System.Data.DataException),View = "DatabaseError"}, 1);filters.Add(new HandleErrorAttribute(), 2); }上面雖然寫能抓到所有錯誤,但其實 HandleErrorAttribute 只能抓到 HTTP 500 系列的錯誤,如果像是 404 這種的就抓不到了,需要再另外定義。
現在我們把 web.config 的
<customErrors mode="On"> </customErrors>改成
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm"><error statusCode="404" redirect="~/error/notfound"></error> </customErrors>
有兩個重點是
如果?web.config?有將?custom?errors?設成?On,程序里面也有使用?HandleErrorAttribute,那在發生錯誤時,程序會自動導向到?Error.cshtml。
(它會在你當前頁面的文件夾里尋找是否有?Error.cshtml?,如果找不到才會去?Views/Shared?里面找)
而忽略掉?customErrors?所設定的?defaultRedirect?跟里面的?<error?statusCode="404"?redirect="~/errortfound"></error>。?如果?web.config?有將?custom?errors?設成?On,程序里面沒有使用?HandleErrorAttribute,那在發生錯誤時,才會導向到?customErrors?所設定的?defaultRedirect?或里面的?<error?statusCode="404"?redirect="~/errortfound"></error>。
那如果要測試第二點,是不是要把?HandleErrorAttribute?的程序全刪掉?
當然不用那么麻煩,只要把?Global.asax.cs?里面的?FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);?批注掉就行了。? ?
轉載于:https://www.cnblogs.com/fuyu-blog/p/4435426.html
總結
以上是生活随笔為你收集整理的MVC4下配置log4net 五部曲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到好多蛇是怎么回事
- 下一篇: CountDownLatch线程同步辅助