我只想记录一些控制器(或路由)的访问,因为可以通过选中/取消选中IIS中的“记录访问”复选框来使用传统的ASP.NET页面。
有谁知道这是不是可能的呢?没有自定义日志记录组件的解决方案将是非常棒的!如果你知道如何分享你的知识,请分享;)
提前感谢
发布于 2014-01-28 22:02:31
创建一个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();
}
}这将保存到一个名为Transactions的数据库表中,每次在该控制器上调用操作方法时,都会记录用户、控制器和操作方法名称。显然,我只是输入了保存到数据库的UnitOfWork方法,您可以插入任何您喜欢的方法。我通常将这些方法保存在filters文件夹中,添加一个using语句,然后将其添加到控制器中,如下所示;
[ActionExecutedFilter]
public class BaseController : Controller
{
}同样,只需让所有希望记录数据的控制器继承BaseController即可。
你也可以使用像Log4Net这样的东西,但我发现这样做就能得到我需要的东西。不管你自己怎么想。
http://dotnetdarren.wordpress.com/2010/07/29/logging-in-mvc-part-4-log4net/
发布于 2014-01-28 22:09:13
没有自定义日志组件的解决方案将是非常棒的!
除了基本的IIS诊断日志之外,我无法在IIS中想到任何特定于ASP.Net MVC的日志记录功能。
我想提供的一个简单的解决方案是编写一个HttpModule。在HttpModule中,您可以记录请求。此外,如果你想控制记录什么和不记录什么,那么基于路由,你可以在HttpModule中实现这一点。HttpModule的优点是易于插入和移除。
Make HttpModule work only on certain routes
当涉及到日志记录本身时,您可以在数据库或日志文件中使用自己的自定义逻辑。但您可以选择ELMAH、Log4Net或Enterprise Logging Application Block
https://stackoverflow.com/questions/21406893
复制相似问题