2014-01-28 38 views
0

我想通過檢查/取消選中IIS中的「日誌訪問」複選框,僅對一些控制器(或路由)記錄訪問,因爲它可以與傳統ASP.NET頁面一起使用。控制器特定的iis在IIS中使用ASP.NET MVC進行日誌記錄

有誰知道這是可能的嗎?沒有自定義日誌記錄組件的解決方案將非常棒!請分享你的知識,如果你知道如何;)

在此先感謝

回答

0

創建BaseController它要爲繼承記錄數據控制器。然後創建一個覆蓋OnActionExecuted方法並將其應用於基本控制器的ActionFilter。事情是這樣的..

public class ActionExecutedFilter : System.Web.Mvc.ActionFilterAttribute 
{ 
    UnitOfWork unitOfWork= new UnitOfWork(); 

    public override void OnActionExecuted(ActionExecutedContext filter) 
    { 
     Transaction tran = new Transaction(); 
     tran.Controller = filter.ActionDescriptor.ControllerDescriptor.ControllerName; 
     tran.ActionName = filter.ActionDescriptor.ActionName; 
     tran.User = HttpContext.Current.User.Identity.Name; 
     tran.Date = DateTime.Now; 

     unitOfWork.TransactionRepository.Insert(tran); 
     unitOfWork.Save(); 
    } 
} 

這將保存到數據庫中的表稱爲交易信息,每一個動作方法被調用該控制器上的時間,記錄用戶,控制器和操作方法的名稱。顯然,我只是輸入了保存到數據庫的UnitOfWork方法,你可以插入任何你喜歡的方法。我通常將這些方法放在一個filters文件夾中,添加一個using語句然後像這樣將它添加到控制器中;

[ActionExecutedFilter] 
public class BaseController : Controller 
{ 
} 

再次,只是讓所有控制器,你希望記錄數據繼承BaseController。

你也可以使用類似Log4Net的東西,但我覺得這樣做就能得到我需要的東西。無論你怎麼想。

http://dotnetdarren.wordpress.com/2010/07/29/logging-in-mvc-part-4-log4net/

0

沒有自定義日誌記錄成分的溶液將是太棒了!

除了基本的IIS診斷日誌,我想不出IIS中的任何ASP.Net MVC特定的日誌功能。

我想提供的一個簡單的解決方案是編寫一個HttpModule。在HttpModule中你可以記錄請求。此外,如果您想要控制要記錄的內容以及不需要的內容,那麼基於路由,您可以在HttpModule中實現這一點。 HttpModule的優勢在於它很容易插入,也易於刪除。

Make HttpModule work only on certain routes

當涉及到記錄本身,你可以有自己的自定義邏輯數據庫或日誌文件。但你可以選擇ELMAHLog4NetEnterprise Logging Application Block