我想通過檢查/取消選中IIS中的「日誌訪問」複選框,僅對一些控制器(或路由)記錄訪問,因爲它可以與傳統ASP.NET頁面一起使用。控制器特定的iis在IIS中使用ASP.NET MVC進行日誌記錄
有誰知道這是可能的嗎?沒有自定義日誌記錄組件的解決方案將非常棒!請分享你的知識,如果你知道如何;)
在此先感謝
我想通過檢查/取消選中IIS中的「日誌訪問」複選框,僅對一些控制器(或路由)記錄訪問,因爲它可以與傳統ASP.NET頁面一起使用。控制器特定的iis在IIS中使用ASP.NET MVC進行日誌記錄
有誰知道這是可能的嗎?沒有自定義日誌記錄組件的解決方案將非常棒!請分享你的知識,如果你知道如何;)
在此先感謝
創建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/
沒有自定義日誌記錄成分的溶液將是太棒了!
除了基本的IIS診斷日誌,我想不出IIS中的任何ASP.Net MVC特定的日誌功能。
我想提供的一個簡單的解決方案是編寫一個HttpModule。在HttpModule中你可以記錄請求。此外,如果您想要控制要記錄的內容以及不需要的內容,那麼基於路由,您可以在HttpModule中實現這一點。 HttpModule的優勢在於它很容易插入,也易於刪除。
Make HttpModule work only on certain routes
當涉及到記錄本身,你可以有自己的自定義邏輯數據庫或日誌文件。但你可以選擇ELMAH或Log4Net或Enterprise Logging Application Block